2013-10-22 34 views
1

我是scrapy的新手,看起来这个问题没有被问到。scrapy在depth_limit上似乎没有优化

问题是,我只想得到一个大型网站的浅度爬行(大约500个链接),所以我设置了depth_limit=1(也许以后会扩展到2或3),并且还要求蜘蛛过滤所有重复响应。

然而,阅读日志后,我发现,即使depth_limit=1,履带还检查了不少头版的出站链接(约100000)和所有返回depth > 1,这是浪费时间,因为上的所有链接首页的深度为1,那么生成的链接肯定会与深度2或更高。我认为没有理由检查深度为1的链接的outlinks,找到深度等于1的链接。

那么,如何编写我的设置来实现我自己的逻辑或优化蜘蛛?

回答

1

我认为你是对的。 Scrapy在这里做了额外的工作。

深度限制(或深度过滤器)作为管道末端的中间件实现。因此,在整个循环(抓取页面,生成项目,生成请求)之后,它会过滤请求。

我如果使用BaseSpider那么你可以使用request.meta存储深度,并增加它产生的请求,勾勒出一个解决方案,

。由于您是在解析回调中有效生成请求的人,因此在达到深度时不会生成请求。

如果您使用的是爬行蜘蛛,那么您必须覆盖基础CrawlSpider的“_requests_to_follow”。你仍然会传播深度。 _request_to_follow中的所有内容都将相同,除非达到深度,否则不会提取并生成请求。

希望它有帮助。