1

我是scrapy的新手,似乎还没有问过这个问题。

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

但是看了日志发现,即使当 时depth_limit=1,爬虫还是会检查很多首页的外链(100000左右),全部返回depth > 1,浪费时间,因为首页的所有链接都是深度为1的,那么生成的链接肯定会具有 2 或更高的深度。我认为没有理由检查深度为 1 的链接的外链以找到深度等于 1 的外链。

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

4

1 回答 1

1

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

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

我可以概述一个解决方案,

如果您使用的是 BaseSpider,那么您可以使用 request.meta 来存储深度并为生成的请求增加它。由于您是在解析回调中有效生成请求的人,因此在达到深度时您将不会生成请求。

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

希望能帮助到你。

于 2013-11-01T18:29:15.953 回答