用Python Mechanize做爬虫遇到的内存过高问题
今天在用mechanize写了一个爬虫脚本,想要去某网站爬取大概30万张图片。
?
整个过程是:
1、获取目标页面地址
2、取得目标地址前几页的所有图片url
3、对这些url进行下载,并把索引数据保存到mysql数据库。
?
?
这个脚本大概每秒钟完成一张图片的下载(主要是网络只有200K/S左右,是瓶颈)
?
?
当图片下载到大约15000张左右的时候,发现越来越慢,最后干脆停下了。
?
用ps aux查看,发现进程sleep了,感觉很奇怪。
free看一下,内存竟然只剩下100M了(系统总内存4GB)
?
在网上瞎逛了一下,发现原来mechanize默认会保存模拟过的操作历史,导致占用的内存越来越大:
http://stackoverflow.com/questions/2393299/how-do-i-disable-history-in-python-mechanize-module
?
?
为了方便,大约翻译一下:
?
mechanize初始化Browser()的时候,如果你不给他传一个history对象作为参数,Browser()就会按照默认的方式(允许保存操作历史)来进行初始化,你可以随便传个什么history给它即可,如自定义一个NoHistory对象:
?
class NoHistory(object): def add(self, *a, **k): pass def clear(self): passb = mechanize.Browser(history=NoHistory())?
?
问题不大,记录一下以供后来者参考。