我有一个从SitemapSpider
继承的蜘蛛。正如所料,启动时的第一个请求是sitemap.xml
我的网站。但是,为了让它正常工作,我需要为所有请求添加一个头,包括获取站点地图的初始请求。我使用DownloaderMiddle软件这样做,如下所示:
def process_request(self, request: scrapy.http.Request, spider):
if "Host" in request.headers:
return None
host = request.url.removeprefix("https://").removeprefix("http://").split("/")[0]
request.headers["Host"] = host
spider.logger.info(f"Got {request}")
return request
但是,看起来Scrapy的请求重复数据消除程序正在阻止该请求通过。在我的日志中,我看到如下内容:
2021-10-16 21:21:08 [ficbook-spider] INFO: Got <GET https://mywebsite.com/sitemap.xml>
2021-10-16 21:21:08 [scrapy.dupefilters] DEBUG: Filtered duplicate request: <GET https://mywebsite.com/sitemap.xml>
由于process_request
中的spider.logger.info
只触发一次,因此我假定这是第一个请求,并且在处理之后,它会被消除重复数据。我认为,可能是在下载ermiddle软件之前触发了重复数据消除(这可以解释请求是在日志中没有第二个“get…”的情况下进行重复数据消除的),但是,我认为这不是真的,原因有两个:
为什么会发生这种情况?我在{
它不会处理第一个响应,也不会获取第二个响应,因为您正在从正在筛选的自定义DownloaderMiddleware
process_request
函数返回新请求。从文档中:如果您明确地说不要过滤第二个请求,那么它可能会起作用
相关问题 更多 >
编程相关推荐