背景
Webmagic 爬蟲時出現了請求超時異常、但是請求沒有重新被重新發送的情況,跟蹤了一遍原始碼,發現 Site 類定義了兩個重試次數的變數,有一個看似正確的變數,卻並不是請求重試使用的屬性,導致超時異常後直接中斷了請求。
本文來分享這個問題的始末。
Site 與重試有關的引數定義 Webmagic 的 PageProcessor 時,需要提供一個 getSite 方法給 Spider 呼叫。
site = Site.me().setTimeOut(1000).setRetryTimes(3).setSleepTime(500));
但是,實際上,Spider 類在處理異常重試使用的變數是 recycleRetryTimes :
由於這個預設 int 屬性的值為 0,所以 onDownloadFail 方法直接休眠了。
解決辦法呼叫 Site 的 setCycleRetryTimes 方法來設定重試次數就可以了。這大概是一個缺陷吧,Spider 類中是找不到對 retryTimes 的引用的,應該是作者變更了變數名稱後,沒有去掉無用程式碼吧。
最新評論