我正在尝试通过 HTTP 从单个站点获取 100 万个以上的页面。 urlgrabber 似乎是使用“保持事件”连接的快速解决方案。然而,过了一会儿我的脚本失败了,没有任何堆栈跟踪:“致命的 Python 错误:取消分配无”
这是失败的隔离 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 个周期后失败。
我做错了什么?
请您参考如下方法:
正如其他人所提到的,当您运行这么多次抓取时,urlgrabber 会出现问题。此外,如果您真的要抓取数十万个 URL,这将非常缓慢。作为替代方案,请考虑使用可信赖的 wget。
当然,你会说你想要一个 Python 解决方案,为此,你绝对应该在 http://scrapy.org/ 查看 Scrapy。 ,这通常被认为是进行这种大规模抓取的最佳方式。
