python内存占用过高_用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): pass

b = mechanize.Browser(history=NoHistory())

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

分享到:

2012-03-27 18:36

浏览 3546

论坛回复 / 浏览 (1 / 2931)

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值