gpt4 book ai didi

python - Scrapy 中的持久重复过滤

转载 作者:IT王子 更新时间:2023-10-29 06:06:48 26 4
gpt4 key购买 nike

我刚开始使用 scrapy,我想要一种方法来保留以前抓取过的 URL,这样我就可以运行后续的抓取,并且只从未知的 URL 中获取新数据。我看到了几种不同的过滤重复项的方法和几种保存数据的方法。我想知道在 scrapy 版本 0.24 中进行这些事件的推荐方法是什么。以下是我看到的选项:

用于重复过滤

settings.py 文件中有 DUPEFILTER_CLASS,文档中仍引用该文件。我还看到文档提到在 ItemPipeline 中放置一个重复的过滤器,如下所示:http://doc.scrapy.org/en/latest/topics/item-pipeline.html?highlight=duplicates#duplicates-filter

人们是在使用 DUPEFILTER_CLASS 还是在 Item Pipeline 中放置了 dupefilter?

用于持续重复跟踪

我曾尝试使用 scrapy-redis 来保存之前已被抓取的 URL,以便它们可以被重复的过滤器使用,但似乎任何 DUPEFILTER_CLASS 我正在使用的被忽略了。我还看到有 spider.state 如果您在运行时使用 JOBDIR 选项,它将存储一个字典,但这似乎不是最适合用于重复过滤。

谁能给我指出一个可用于在批处理之间保留数据并进行重复过滤的代码示例?

最佳答案

我没有代码片段,也没有足够的代表来评论你的问题,但这里有一个关于持久性 url 欺骗过滤想法的建议。

保留已抓取网址的数据库。

实现一个下载器中间件,执行以下操作(python 伪代码):

if url isn't present: 
add url to databse
return None # this tells scrapy to keep handling request as normal
else:
raise IgnoreRequest

HTH

编辑: http://doc.scrapy.org/en/latest/topics/downloader-middleware.html

如果您使用的是爬行蜘蛛,您可以为非持久性过滤执行此操作:

    rules = (
Rule(SgmlLinkExtractor(unique=True,
deny=[r'.*QuickInfo.*'],
allow_domains=allowed_domains,
restrict_xpaths=['//*[starts-with(@id, "e")]//a',
'//*[starts-with(@id, "HP_Priority")]//a']),
follow=True),)

unique=True 将过滤此蜘蛛实例的重复请求。

关于python - Scrapy 中的持久重复过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24957731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com