【问题标题】:Avoid Duplicate URL Crawling避免重复的 URL 抓取
【发布时间】:2013-07-15 17:48:21
【问题描述】:

我编写了一个简单的爬虫。 在settings.py文件中,通过参考scrapy文档,我使用了

DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'

如果我停止爬虫并再次重新启动爬虫,它会再次抓取重复的网址。 我做错了吗?

【问题讨论】:

  • 你能告诉我你是否必须导入相应的包吗?我将DUPEFILTER_CLASS 添加到我的settings.py 文件中,但出现以下错误:ModuleNotFoundError: No module named 'scrapy.dupefilter'

标签: scrapy


【解决方案1】:

我相信您正在寻找的是“持久性支持”,用于暂停和恢复抓取。

要启用它,您可以这样做:

scrapy crawl somespider -s JOBDIR=crawls/somespider-1

您可以阅读更多关于它的信息here

【讨论】:

    【解决方案2】:

    根据documentationDUPEFILTER_CLASS已经默认设置为scrapy.dupefilter.RFPDupeFilter

    RFPDupeFilter 如果您停止爬虫,则无济于事 - 它仅在实际爬取时有效,可帮助您避免抓取重复的网址。

    您似乎需要根据RFPDupeFilter 创建自己的自定义过滤器,就像在这里完成的那样:how to filter duplicate requests based on url in scrapy。如果你想让你的过滤器在scrapy爬取会话之间工作,你应该将爬取的url列表保存在数据库或csv文件中的某个位置。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      您可以像scrapy-redis 这样使用 Redis 重写 Scheduler,然后您可以在重新运行项目时避免重复的 URL 抓取

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多