Scrapy之Request函式回撥未執行解決方案
阿新 • • 發佈:2019-02-03
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