如何强制Scrapy爬取重复URL?

31 投票
2 回答
23592 浏览
提问于 2025-04-18 03:06

我正在学习Scrapy,这是一个用于网络爬虫的框架。
默认情况下,它不会爬取重复的链接或者已经爬过的链接。

我想知道怎么让Scrapy去爬取重复的链接或者已经爬过的链接。
我在网上找了很多资料,但没有找到相关的帮助。

我发现了DUPEFILTER_CLASS = RFPDupeFilterSgmlLinkExtractor,这些内容来自Scrapy - Spider crawls duplicate urls,但这个问题和我想要的正好相反。

2 个回答

32

一个更优雅的解决方案是完全禁用重复过滤:

# settings.py
DUPEFILTER_CLASS = 'scrapy.dupefilters.BaseDupeFilter'

这样,你就不需要在所有请求创建的代码中到处加上 dont_filter=True 了。还有一个副作用:这只禁用了重复过滤,而不会影响其他过滤,比如外部网站的过滤。

如果你想在项目中只对某一个或几个爬虫使用这个设置,可以在爬虫的实现中通过 custom_settings 来设置:

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter',
    }
60

你可能在找dont_filter=True这个参数,它是在Request()里用的。你可以查看这个链接了解更多信息:http://doc.scrapy.org/en/latest/topics/request-response.html#request-objects

撰写回答