我已经制作了一个像这样的简单中间件(我删除了所有实际的逻辑以掩盖可能的错误)
class ApiMiddleware:
def process_request(self, request, *args, **kwargs):
return request
我已经在这样的设置中注册,我尝试将整数更改为各种数字,以查看它是否以与另一个中间件相冲突的有序触发,但是我得到了相同的结果:
DOWNLOADER_MIDDLEWARES = {
'py_scrape.middleware.ApiMiddleware': 543,
}
已成功检测到中间件,但由于某种原因DUP_FILTER认为所有请求都是重复的,即使第一个请求也是重复的,这应该是不可能的。
日志:
2020-09-07 10:15:04 [scrapy.core.engine] INFO: Spider opened
2020-09-07 10:15:04 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2020-09-07 10:15:04 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2020-09-07 10:15:04 [scrapy.dupefilters] DEBUG: Filtered duplicate request: <GET [url is here]> (referer: None)
2020-09-07 10:15:04 [scrapy.core.engine] INFO: Closing spider (finished)
2020-09-07 10:15:04 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
编辑
我已经阅读了更多文档,我认为这是正在发生的事情:
虽然找不到解决办法。
答案 0 :(得分:0)
解决了它,也许不是最好的解决方案,但是它可以工作。代码,如果其他人遇到相同的问题:
class ApiMiddleware:
def process_request(self, request, spider):
if request.meta.get('applied'):
return None
new_meta = request.meta
new_meta['applied'] = True
request = request.replace(
url='<new formated url here>',
meta=new_meta)
return request