首頁>技術>

背景

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 的引用的,應該是作者變更了變數名稱後,沒有去掉無用程式碼吧。

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 你不得不知道的七個JavaScript小技巧