2014-02-07 38 views
0

我已經構建了一個機器人,它可以從根開始抓取網站,解析頁面,保存所有內部鏈接,然後移動到鏈接列表的第一頁,解析它等等。如何處理機器人代碼中的錯誤

我知道它沒有真正優化在PHP中運行這種類型的機器人,但它是我碰巧知道的唯一一種語言,這就是我選擇的語言。

我遇到了各種各樣的問題:頁面返回404,然後頁面被重定向,然後頁面不可分析(少數頁面在分析時返回幾個字的werid大小寫,但發送時返回整個期望的主體GET http請求)等等...

無論如何,我認爲我已經制作出了機器人,因此它可以通過它解析的網頁的99.5%,但是仍然有一些網頁是不可分析的,並且在那時我的機器人崩潰(400中約1頁使機器人崩潰,而我的意思是崩潰,我只是得到一個致命錯誤,代碼剛剛停止)。

現在我的問題是:如何防止這種情況發生?我不是問如何修復一個我甚至不能調試的錯誤(他們大部分時間都是超時,所以不容易調試),我會知道如何處理這些錯誤。如果發生某種類型的錯誤,是否有刷新頁面的方法?有沒有辦法繞過那些致命的錯誤?

我看不出向你展示任何代碼的點,但如果你覺得需要檢查它的某個部分。

謝謝

+0

我認爲一個更好的問題是[如何檢測PHP的400錯誤?](http://bit.ly/1bx7bmZ)。 –

+0

這並不是一個更好的問題,那些讓機器人死機的機會返回200(幾乎95%的時間)。不管怎麼說,還是要謝謝你。 – bastienbot

+0

試試catch塊? – pleasedontbelong

回答

1

最簡單的方法我能想到的是使用try {}趕上(){}塊。

[http://www.php.net/manual/en/language.exceptions.php][1]

你把解析器的部分進入try塊,如果拋出一個錯誤,提供一些默認值並轉到下一個鏈接。

如果您遇到致命錯誤(我認爲您嘗試不瞭解),那麼您也可以嘗試將每一步下載/解析到一個單獨的php文件中,該文件通過它需要查找的url進行調用通過捲曲。這種窮人的並行化會導致你承擔很多開銷,可能並不一定如何使用php,但應該工作。您還需要將結果存儲在數據庫/文本文件中。

+0

感謝您的回覆。結果迄今存儲在會話變量中(我很驚訝地發現會話可以處理超過1MB的信息)。我會嘗試try {}和catch {}方法,看看這會帶領我。非常感謝 ! – bastienbot

+0

好吧,這讓我的生活變得容易一些,因爲它避免了一些錯誤(超時仍然存在),但這些少數人暫時還不夠好。 – bastienbot