我是scrapy的新手,似乎没有问过这个问题。
问题是,我只想对大型网站进行浅层抓取(大约500个链接),所以我设置depth_limit=1
(可能稍后会延伸到2或3),并且还要求蜘蛛过滤所有重复的响应。
然而,在阅读完日志之后,我发现即使depth_limit=1
,抓取工具仍会检查首页的大量外链(大约100000)并且全部返回depth > 1
,这是浪费由于首页上的所有链接都具有深度1,因此生成的链接肯定具有深度2或更高。我认为没有理由检查深度为1的链接的外链,以找到深度等于1的链接。
那么如何编写我的设置以实现我自己的逻辑或优化蜘蛛?
答案 0 :(得分:1)
我认为你是对的。 Scrapy在这里做了额外的工作。
深度限制(或深度过滤器)在管道末端实现为中间件。因此,在整个周期(刮擦页面,生成项目,生成请求)之后,它会过滤请求。
我可以概述一个解决方案,
如果您使用的是BaseSpider,则可以使用request.meta存储深度并为生成的请求增加深度。由于您是在解析回调中有效生成请求的人,因此在达到深度时不会生成请求。
如果您正在使用爬网蜘蛛,则必须覆盖基础CrawlSpider的“_requests_to_follow”。你仍然会传播深度。 _request_to_follow中的所有内容都是相同的,除非达到深度,否则您将无法提取并生成请求。
希望它有所帮助。