2012-05-25 20 views
2

我寫了一個腳本,從網站下載頁面列表。我不時收到以下錯誤(秒數是可變的):bwshare模塊和PHP抓取

bwshare模塊將拒絕您的請求在接下來的7秒。 您已經下載過快的數據。

我發現當在循環中使用睡眠(2)時,它工作得更好,但是時間延遲太昂貴。 如何處理這個模塊的最佳方式是什麼?我是否應該毫不拖延地刮掉它,並且如果響應與上述消息類似,只需使用sleep達到所需的秒數?

+1

是的,你需要睡抓住設置爲7秒,或者使用多臺計算機(多個IP) – Sergey

回答

1

這一切都取決於在錯誤消息之前可以獲得多少頁。

嘗試並測量您可以獲得的平均頁數。

bwshare訊息前最少4頁。

如果您收到錯誤消息達到4個下載之前,那麼金正日將更快每次下載後進入休眠狀態(2)。

+0

它通常在10-15頁左右 – user965748

+0

然後,正如我所說的,當你收到bwshare錯誤信息時,只是睡覺(7)。你會得到更多的表現。否則,獲得30頁將花費你1分鐘,而不是僅僅14秒! –

+0

我也想用cURL登錄,因爲它可能會阻止這種情況發生。 – user965748

0

試試這種方式...它可能會幫助你。

$requestTime = 0.1; // s/connection 

    foreach(/* blah */) { 
     $start = microtime(true); 
     // Do your stuff to here.. get_file_content($url) and other processing ......... 

     if($timeTaken = microtime(true)-$start < $requestTime) { 
      usleep(($requestTime-$timeTaken)*1000000); 
     } 
    } 

,如果你的問題就解決了,然後嘗試後你的答案讓其他人也可受益

+0

我們想知道您是如何克服性能問題的......並且您發現在睡眠(n)中有效使用了哪些值? –

+0

由於速度在項目中是必需的,我決定放棄這一點,並採用完全不同的方式。 – user965748