問題情景:
scrapy爬取網頁,返回值418(按照請求來說,是一個完整的網絡請求)。說明此接口已經被后台爬蟲檢測程序檢測到了。
通過研讀scrapy文檔,在自定義的418檢測下載中間件里面,process_response中檢測返回值,並設置request的http/https代理,然后return request。
按照文檔所述,此request會被加入到下載調度器中重新download。
bug:
返回的request未生效!!!沒有重新下載!
解決
通過研讀RetryMiddleware的源碼。見:https://docs.scrapy.org/en/latest/_modules/scrapy/downloadermiddlewares/retry.html#RetryMiddleware
request.dont_filter = True # 禁止被過濾掉
說明直接返回request會被過濾掉。需要設置dont_filter。