首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

用Python Mechanize做爬虫遇到的内存过高有关问题

2012-06-26 
用Python Mechanize做爬虫遇到的内存过高问题今天在用mechanize写了一个爬虫脚本,想要去某网站爬取大概30

用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())
?

?

问题不大,记录一下以供后来者参考。

热点排行