我是Scrapy的新手并且正在阅读 Learing Scrapy 进行学习,我对刮擦顺序有疑问。
这本书提供了一段代码:
rules = (
Rule(LinkExtractor(restrict_xpaths='//*[contains(@class,"next")]')),
Rule(LinkExtractor(restrict_xpaths='//*[@itemprop="url"]'),
callback='parse_item')
)
它说Scrapy使用LIFO策略来抓取。所以我想第一项应该是最后一页上的项目,但事实证明第一项是在第一页上。
为什么呢?根据代码,我认为Scrapy将遵循第一条规则,直到找到最后一页,然后它将开始解析最后一页上的项目。我很困惑。
如果一个网站有数百万个页面,Scrapy在到达最后一页之前不会解析任何项目?
答案 0 :(得分:1)
按照元组的顺序,每个页面都遵循所有规则。
例如,您有两条规则:
如果您在第一页上运行此蜘蛛,它将找到其他分页网址并安排它们然后查找产品并使用parse_product
回调或您设置的任何内容安排它们。之后对于任何具有默认回调的预定网址(你没有具体的callback
参数),它会重复这个,直到找不到任何东西。