我编写了一个简单的爬虫。在 settings.py 文件中,通过参考scrapy文档,我使用了
DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'
如果我停止爬虫并再次重新启动爬虫,它会再次抓取重复的网址。难道我做错了什么?
我编写了一个简单的爬虫。在 settings.py 文件中,通过参考scrapy文档,我使用了
DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'
如果我停止爬虫并再次重新启动爬虫,它会再次抓取重复的网址。难道我做错了什么?
我相信您正在寻找的是“持久性支持”,以暂停和恢复爬行。
要启用它,您可以执行以下操作:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
你可以在这里阅读更多关于它的信息。
根据文档,默认情况下DUPEFILTER_CLASS
已设置为scrapy.dupefilter.RFPDupeFilter
。
RFPDupeFilter
如果您停止爬虫并没有帮助 - 它仅在实际爬网时起作用,可以帮助您避免抓取重复的网址。
看起来您需要创建自己的基于 的自定义过滤器RFPDupeFilter
,就像在这里完成的那样:如何根据 scrapy 中的 url 过滤重复请求。如果您希望您的过滤器在抓取会话之间工作,您应该将已抓取的 url 列表保存在数据库或 csv 文件中的某个位置。
希望有帮助。
您可以使用像scrapy-redis这样的 Redis 重写调度程序,然后您可以在重新运行项目时避免重复的 URL 抓取。