2011-02-03 29 views
2

我想從單個站點通過HTTP獲取1m +頁面。 urlgrabber似乎是使用「保持活力」連接的快速解決方案。但是,經過一段時間我的腳本失敗,沒有任何堆棧跟蹤:「致命的Python錯誤:釋放無」「致命的Python錯誤:釋放無」和urlgrabber

這是孤立的python代碼失敗(爲了簡化,使用file:// URL,結果相同):

import urlgrabber 

url = "file:///some/existing/file.html" 

for i in range(0, 15000): 
    print i 
    handle = urlgrabber.urlopen(url, timeout = 1) 
    # do something useful 
    handle.close() 

在〜3231個週期後失效。

我做錯了什麼?

+1

您使用的是什麼Python版本?獲取最新版本(2.x分支中的2.7.1)。也許這個bug在那裏修復。 – 9000 2011-02-03 20:11:09

回答

1

就像其他人提到的那樣,當你運行這麼多的抓取時,urlgrabber的問題得到了解決。另外,如果你真的抓取了成千上萬的URL,這將會非常慢。作爲一種選擇,考慮可靠的wget。

當然,你會說你想要一個Python解決方案,爲此,你一定要看看Scrapy在http://scrapy.org/,這通常被認爲是做這種大規模的抓取的最佳方式。