gpt4 book ai didi

基于每个蜘蛛的 Scrapy DupeFilter?

转载 作者:行者123 更新时间:2023-12-01 12:40:35 27 4
gpt4 key购买 nike

我目前有一个项目有很多蜘蛛,其中大约一半需要一些自定义规则来过滤重复的请求。这就是为什么我为每个需要它的蜘蛛使用自定义规则扩展了 RFPDupeFilter 类。

我的自定义 dupe 过滤器检查请求 url 是否来自需要自定义过滤的站点并清理 url(删除查询参数、缩短路径、提取唯一部分等),以便所有相同的指纹都相同页。到目前为止一切顺利,但是目前我有一个包含大约 60 个 if/elif 语句的函数,每个请求都会通过。这不仅不是最理想的,而且也很难维护。

那么问题来了。有没有一种方法可以创建过滤规则,即“清除”蜘蛛内部的网址?对我来说,理想的方法是扩展 Spider 类并定义一个 clean_url 方法,该方法默认只返回请求 url,并在需要自定义内容的蜘蛛中覆盖它。我调查了它,但是我似乎无法找到一种方法来从 dupe 过滤器类访问当前蜘蛛的方法。

非常感谢任何帮助!

最佳答案

您可以实现下载器中间件。

中间件.py

class CleanUrl(object):
seen_urls = {}
def process_request(self, request, spider):
url = spider.clean_url(request.url)
if url in self.seen_urls:
raise IgnoreRequest()
else:
self.seen_urls.add(url)
return request.replace(url=url)

设置.py

DOWNLOADER_MIDDLEWARES = {'PROJECT_NAME_HERE.middleware.CleanUrl: 500} 
# if you want to make sure this is the last middleware to execute increase the 500 to 1000

如果您这样做的话,您可能想要一起禁用 dupefilter。

关于基于每个蜘蛛的 Scrapy DupeFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186265/

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