Web scraping 刮屑响应403设置请求。不要过滤错误

Web scraping 刮屑响应403设置请求。不要过滤错误,web-scraping,scrapy,Web Scraping,Scrapy,我现在正在刮 这个站点使用一个cookie('datadome'),该cookie在给定的时间内过期,然后在所有请求响应都是403之后,直到它停止。当前正在使用setting.py中的JOB_DIR用于爬网之间的持久数据。 更新cookie后,再次启动爬虫程序,但由于已经对站点执行了重复请求,因此忽略了403页 有没有办法在收到响应后设置dont_过滤器 我使用下载中间件尝试了以下方法,但没有成功 def process_response(self, request, response, spi

我现在正在刮

这个站点使用一个cookie('datadome'),该cookie在给定的时间内过期,然后在所有请求响应都是403之后,直到它停止。当前正在使用setting.py中的JOB_DIR用于爬网之间的持久数据。 更新cookie后,再次启动爬虫程序,但由于已经对站点执行了重复请求,因此忽略了403页

有没有办法在收到响应后设置dont_过滤器

我使用下载中间件尝试了以下方法,但没有成功

def process_response(self, request, response, spider):

    #if response.status == 403:
    #    print(request.url,"expired cookie")
    #    request.dont_filter=True

    return response
操纵url似乎也是一个选项,但我没有找到任何关于如何使用它的提示


提前感谢。

我不确定我是否理解您的用例,但要回答您的问题:您可以在downloader中间件中重新安排请求。确保它在您的设置中的优先级较高,并在
处理\u响应中
返回一个新的修改请求:

def过程_响应(自身、请求、响应、爬行器):
如果response.status==403:
打印(request.url,“过期cookie”)
request.don\u filter=True
退货申请
返回响应
根据文档,如果
process\u response
返回一个请求,它将被重新安排,但是如果您返回响应,它将继续通过中间件进行处理,并返回给您的回调

如果它返回一个响应(可以是相同的给定响应,也可以是全新的响应),则该响应将继续使用链中下一个中间件的process_Response()进行处理

如果它返回一个请求对象,中间件链将停止,返回的请求将被重新安排在将来下载。这与从进程_request()返回请求的行为相同


谢谢这正是我一直在寻找的,谢谢你的链接,但是现在我需要检查在我返回请求或忽略请求后该做什么。可能最好返回一个异常并使用errback回调进行处理,但我需要检查在我再次运行spider后,Scrapy是否仍会再次访问同一页面。@FranciscoVaras您始终可以使用dupe策略用自己的类替换
DUPEFILTER\u类
设置;请参阅:非常感谢,我们将检查文档。