【问题标题】:Scrapy Can duplicates filter be persistent with Jobs?Scrapy 重复过滤器可以在 Jobs 中保持不变吗?
【发布时间】:2023-03-15 10:37:01
【问题描述】:
from scrapy.exceptions import DropItem

class DuplicatesPipeline(object):

    def __init__(self):
        self.ids_seen = set()

    def process_item(self, item, spider):
        if item['id'] in self.ids_seen:
            raise DropItem("Duplicate item found: %s" % item)
        else:
            self.ids_seen.add(item['id'])
            return item

以上代码来自Scrapy官网:http://doc.scrapy.org/en/latest/topics/item-pipeline.html 用于过滤重复项。

正如 Scrapy 文档所建议的那样,http://doc.scrapy.org/en/latest/topics/jobs.html 要暂停和恢复蜘蛛,我需要使用 Jobs 系统。

所以我很好奇 Scrapy Jobs 系统是否可以使重复过滤器在其目录中持久化。实现重复过滤器的方式非常简单,我对此表示怀疑。

【问题讨论】:

    标签: python web-scraping scrapy web-crawler scrapy-pipeline


    【解决方案1】:

    您只需要实现您的管道,以便它读取JOBDIR 设置,并且在定义该设置时,您的管道:

    1. JOBDIR 目录中的某个文件中读取self.ids_seen 的初始值。

    2. 在运行时,它会在将新 ID 添加到集合时更新该文件。

    【讨论】:

      猜你喜欢
      • 2014-09-17
      • 2011-01-21
      • 2015-03-28
      • 2021-07-08
      • 1970-01-01
      • 2014-06-30
      • 2018-02-20
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多