“致命的Python错误:释放None”和urlgrabber
我正在尝试从一个网站上通过HTTP获取超过100万页的内容。urlgrabber看起来是个不错的选择,因为它使用了“保持连接”的方式,可以更快地获取数据。不过,过了一段时间后,我的脚本就会失败,而且没有任何错误提示,显示的是:“致命的Python错误:释放None”。
这里有一段独立的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 个回答
1
正如其他人提到的,urlgrabber在处理这么多抓取时会出现问题。而且,如果你真的要抓取成千上万的URL,这个过程会非常慢。作为替代方案,可以考虑使用可靠的wget。
当然,你可能会说你想要一个Python的解决方案,对于这个需求,你一定要看看Scrapy,网址是http://scrapy.org/,大家普遍认为这是进行大规模抓取的最佳方式。