【问题标题】:Crawl multiple pages with Scrapy使用 Scrapy 抓取多个页面
【发布时间】:2017-07-17 18:44:16
【问题描述】:

目标

使用 Scrapy 和 Python 制作两级深度网络爬虫。

问题

该网站的结构是,对于 1 个页面,爬虫程序正在跟踪链接并提取正确数据的大约 10 个项目。问题是这个结构对于 10 页是递归的,但是最后几页的链接发生了变化,并且注释指向 home1,但是 home2。对于第 2 到 10 页,我们希望爬虫执行相同的例程,因为爬虫所遵循的模式会在这些页面中递归重复。

网站结构

->website.com
-->          /home1
--->               /page/2
-->          /home2/doc/item

我可以使用下一个爬虫从第一级访问数据。

一级爬虫

from scrapy.contrib.spiders import CrawlSpider, Rule
from mySpider.items import Item
from scrapy.linkextractors import LinkExtractor

class MySpider(CrawlSpider):
    name="spider"
    allowed_domains = ["website.com"]
    start_urls = ["https://website.com/home1/"]

    rules = [Rule(LinkExtractor(allow=('(/home2/doc/item((?!:).)*$'),), callback="parse_item", follow=True)]

    def parse_item(self, response):
            item = Item()
            name = response.xpath('//h3/text()')[0].extract()
            item['name'] = name
            return item

【问题讨论】:

标签: python web-scraping scrapy web-crawler


【解决方案1】:

我不确定我是否完全理解您的问题,但是如果您尝试从第一页抓取多个 URL,您可以在 start_urls 数组中列出它们。这将使您能够独立地抓取每个页面。

start_urls = [
    "https://website.com/home1/",
    "https://website.com/home2/",
    "https://website.com/home3/"
]

但是,如果您想抓取 home1 并跟踪 URL 的顺序,以便您可以在以下 home2、home3 等中抓取它们。您可以创建一个全局列表并将 URL 保存到列表中。另一种选择是创建一个 URL 列表,并使用带有 scrapy.Request 的 meta 属性将它们传递给以下请求。

请澄清一下,用例很难理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多