1. 程式人生 > >Scrapy之Request函式回撥未執行解決方案

Scrapy之Request函式回撥未執行解決方案

scrapy 執行Request函式時,回撥函式未執行情況:

    yield scrapy.Request(url=parse.urljoin(response.url, post_url), headers=self.headers, callback=self.parse_detail)

執行的時候發現parse_detail未被呼叫,很大可能是被allowed_domains給過濾掉了。檢視scrapy的執行日誌,可以檢視'offsite/filtered': 21,被過濾了21個域名。

其實,這些日誌資訊都是由 scrapy 中的一個 middleware 丟擲的,如果沒有自定義,那麼這個 middleware 就是預設的 

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

這些日誌資訊都是由 scrapy 中的一個 middleware 丟擲的,如果沒有自定義,那麼這個 middleware 就是預設的 Offsite Spider Middleware,它的目的就是過濾掉那些不在 allowed_domains 列表中的請求 requests。

解決方案:

兩種方法能夠使 requests 不被過濾: 
1. 在 allowed_domains 中加入 url ;
2. 在 scrapy.Request() 函式中將引數 dont_filter=True

 設定為 True。