2013-02-26 157 views
-2

我是python的新手,並且正在爲funsies /教育目的構建一個web爬蟲。我不使用任何遞歸函數,但仍然收到'RuntimeError:最大遞歸深度超出'錯誤。我很困惑,有點覺得我錯過了某些明顯的東西,或者只是誤解了某些東西。我以某種方式遞歸,或者它可能與我的大循環有關?這個想法是抓取網頁,直到您抓取10k頁面。沒有遞歸的Python遞歸錯誤?

更新:

最新的代碼是在這裏:http://pastebin.com/4v5GT7ft

堆棧跟蹤是在這裏:http://pastebin.com/9GzAxZM9

看起來像我的問題是試圖調用STR()上是不正確編碼的URL。我試過解碼URL,然後將它們編碼爲unicode,但我從來沒有能夠成功完成。任何建議將不勝感激!

+7

請確保包含python例外的* full * traceback。這節省了我們所有人必須*猜測*錯誤發生的地方。 – 2013-02-26 18:23:06

+2

如果你正在解析HTML你*是*使用遞歸函數...我建議,當你失敗時,你轉儲頁面變量,看看Html是否形式錯誤 – Crisfole 2013-02-26 18:23:21

+0

我現在在工作,我會發布完整的回溯當我今晚回家時。抱歉。 – Brian 2013-02-26 18:36:07

回答

2

您給我們的代碼實際上並沒有運行(它缺少所有的import語句,並且它有縮進錯誤等),它需要我們沒有的JET數據庫和第三方模塊閱讀它,並將其硬編碼爲使用您的主目錄中已有的目錄。

我試圖修復所有在http://pastebin.com/rCJriEu5(這需要lxmlbs4 - 如果您使用不同的解析庫或BS3,我可以試試這種方式)。

而當我運行它,它似乎工作。完成31.73%,沒有錯誤。即使我在文件開頭執行sys.setrecusionlimit(50),它似乎仍然有效(到目前爲止已完成3.67%)。

所以,無論你的代碼有什麼問題,顯然你都沒有向我們展示過代碼。

+0

這似乎失敗了我約1500頁掃描。我知道這沒有意義,這只是我的觀察。對於刪除導入聲明抱歉,我認爲這會有所幫助(我錯了)。我已經在這裏上傳完整的代碼:http://pastebin.com/q9KCrQrL(應該擺脫縮進錯誤) 至於數據庫,它只是一個名爲python的本地mysql數據庫,用戶名爲password等於Python。所有的日誌文件都應該自動創建(目錄也應該,這要感謝你的代碼)。我正在追溯錯誤,所以我仍在努力解決這個問題。 – Brian 2013-02-27 23:24:40

+0

@Brian:沒有回溯,很難確定發生了什麼......但我的猜測是,遞歸限制實際上發生在HTML解析器_中。請參閱[文檔](http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser)以獲取有關不同解析器'bs4'可以使用的詳細信息,但是如果您退回默認情況下,特別是在2.7.2/3.1.0或更早的版本上,它在很多方面都很糟糕。當我用2.7.2進行測試時,它在前100個文件中有4個失敗(至少有兩個不同的錯誤,這兩個錯誤都不是遞歸錯誤)。 – abarnert 2013-02-27 23:36:05

+0

@Brian:這是一個非常快速的測試方法:無論鏈接失敗,將該鏈接放在開始的'deque'開始處,看它現在是否在第一頁而不是第1500頁失敗。 – abarnert 2013-02-27 23:38:29