2013-12-21 141 views
4

我有一個scrapy蜘蛛,但它有時不返回請求。Scrapy:如何調試scrapy丟失請求

我發現通過在產生請求之前和獲得響應之後添加日誌消息。

蜘蛛已遍歷頁面和解析每個頁面上的項目報廢鏈接。

下面是部分代碼

SampleSpider(BaseSpider): 
    .... 
    def parse_page(self, response): 
     ... 
     request = Request(target_link, callback=self.parse_item_general) 
     request.meta['date_updated'] = date_updated 
     self.log('parse_item_general_send {url}'.format(url=request.url), level=log.INFO) 
     yield request 

    def parse_item_general(self, response): 
     self.log('parse_item_general_recv {url}'.format(url=response.url), level=log.INFO) 
     sel = Selector(response) 
     ... 

我比較每個日誌信息的數量和「parse_item_general_send」比「parse_item_general_recv」

有沒有在最後的統計信息沒有400或500個錯誤,所有的回覆狀態代碼只有200個。看起來請求只是消失。

我還添加了這些參數,以儘量減少可能出現的錯誤:

CONCURRENT_REQUESTS_PER_DOMAIN = 1 
DOWNLOAD_DELAY = 0.8 

由於扭曲的異步性,我不知道如何調試這個錯誤。 我發現一個類似的問題:Python Scrapy not always downloading data from website,卻一直沒有任何迴應

+0

嘗試禁用異地中間件以查看會發生什麼。 – Rolando

+0

我試過了(根據[這個例子](http://doc.scrapy.org/en/latest/topics/spider-middleware.html)),nothig已經改變了,有些請求消失了,從2到5大約120個請求總是消失 –

+0

您可以提供一個重現此問題的最小示例嗎?否則將很難指出有什麼問題,因爲這不是一個常見問題 – Rolando

回答

1

上,相同的音符爲盧,你可以添加設置

DUPEFILTER_CLASS = 'scrapy.dupefilter.BaseDupeFilter' 

你的「settings.py」這將刪除網址緩存。這是一個棘手的問題,因爲scrapy日誌中沒有調試字符串,它告訴你它何時使用緩存結果。

+0

我有同樣的問題。不知何故,我總是他失去了30個請求,並且總是有相同的請求。在我的settings.py文件中設置這個選項後,一切正常。 – arthursfreire