“致命的Python错误:释放None”和urlgrabber

2 投票
1 回答
2120 浏览
提问于 2025-04-16 11:10

我正在尝试从一个网站上通过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/,大家普遍认为这是进行大规模抓取的最佳方式。

撰写回答