1. 程式人生 > >Request 中的回撥函式不執行

Request 中的回撥函式不執行

在 scrapy 中,

scrapy.Request(url, headers=self.header, callback=self.parse_detail)

除錯的時候,發現回撥函式 parse_detail 沒有被呼叫,這可能就是被過濾掉了,檢視 scrapy 的輸出日誌 offsite/filtered 會顯示過濾的數目。這個問題如何解決呢,檢視手冊發現(https://doc.scrapy.org/en/latest/faq.html?highlight=offsite%2Ffiltered)這個問題,這些日誌資訊都是由 scrapy 中的一個 middleware 丟擲的,如果沒有自定義,那麼這個 middleware 就是預設的 Offsite Spider Middleware

,它的目的就是過濾掉那些不在 allowed_domains 列表中的請求 requests。

如下摘自手冊

If the spider doesn’t define an allowed_domains attribute, or the attribute is empty, the offsite middleware will allow all requests.

If the request has the dont_filter attribute set, the offsite middleware will allow the request even if its domain is not listed in allowed domains.