【发布时间】:2012-03-08 00:29:28
【问题描述】:
我试图逐页从网站上抓取一些信息,基本上我是这样做的:
import mechanize
MechBrowser = mechanize.Browser()
Counter = 0
while Counter < 5000:
Response = MechBrowser.open("http://example.com/page" + str(Counter))
Html = Response.read()
Response.close()
OutputFile = open("Output.txt", "a")
OutputFile.write(Html)
OutputFile.close()
Counter = Counter + 1
好吧,上面的代码最终抛出了“内存不足”错误,在任务管理器中显示脚本在运行几个小时后几乎耗尽了 1GB 内存……怎么会?!
谁能告诉我出了什么问题?
【问题讨论】:
-
我要尝试排除的第一件事是 mechanize 正在泄漏内存 - 只需使用
urllib2.urlopen()代替。 -
请注意,
for counter in range(5000):更像 pythonic。 PEP8 推荐使用 lower_case_with_underscores 作为变量名,而 CamelCase 是为类保留的。此外,请查看with以向/从文件写入/读取。 -
(a) 这种“我的代码怎么了”的问题在 codereview 上比较好 (b) 变量重用不是问题 (c) 了解内存分析。
-
@Marcin 不,代码审查是针对 工作 代码的,这显然 not 工作,因为它会引发异常。对于代码审查来说,它是题外话。
标签: python memory urllib2 mechanize