【问题标题】:What order is followed when Scrapy CrawlSpider scraping pages?Scrapy CrawlSpider 抓取页面时遵循什么顺序?
【发布时间】:2018-05-16 18:49:39
【问题描述】:

我是 Scrapy 的新手,正在阅读 Learing Scrapy 来学习,我有一个关于抓取顺序的问题。

书中提供了一段代码:

rules = (
    Rule(LinkExtractor(restrict_xpaths='//*[contains(@class,"next")]')),
    Rule(LinkExtractor(restrict_xpaths='//*[@itemprop="url"]'),
        callback='parse_item')
)

而且它说 Scrapy 使用 LIFO 策略进行爬取。所以我想第一项应该是最后一页上的项,但结果第一项是在第一页上。

为什么?根据代码,我认为 Scrapy 会一直遵循第一条规则,直到找到最后一页,然后它会开始解析最后一页上的项目。我很困惑。

如果一个网站有数百万个页面,Scrapy 不会解析任何项目,直到它到达最后一页?

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    每个页面都按照元组的顺序遵循所有规则。

    例如你有两条规则:

    1. 查找其他分页页面(无回调)
    2. 查找产品(带回调)

    如果您在第一页上运行此蜘蛛,它会找到其他分页网址并安排它们,然后查找产品并使用parse_product 回调或您设置的任何内容安排它们。之后,对于任何具有默认回调的预定 url(您没有指定 callback 参数),它将重复此操作,直到找不到任何内容为止。

    【讨论】:

    • 看来我这里有误会。我认为没有回调的规则将像一个递归函数一样,并一直寻找下一个分页直到结束。并且在第一个规则完成之前,第二个规则不会被执行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多