最近又喜欢爬网页了。今晚第一次大规模爬某网站的网页,算是踩点吧,正则+两次多线程,很久没干这样的事情了。
我的台式机只有1G内存,加虚拟内存共2G。
第一次开了1000个线程,发现Python的进程占内存刷刷刷地上来了,一下子就四五百M,而且似乎不断地增加。我一开始以为是我的大字典占的,连忙关掉所有占内存的东西,包括浏览器、IM等,终止掉正在运行的Python进程,改为个100个进程,占的内存一下子就下来了。
最终我先开了100个线程,等结束之后重新开了新的200个线程,发现占的内存也就三四百M。
不过有三个问题:
1、耗时太长了。第一波先用100个线程爬1000个页面,分析出有用信息后,再开200个线程去爬10w个页面,结果耗时time = 14617.6570001,约合4.063个小时。
2、爬网页的时侯,用浏览器打开网页会非常非常慢。有少数网页会超时。跟下行流量有关系吧,唉,俺可怜的有线通。
3、对方网站应该有策略应对这些密集的访问的,发现有些网页会被封。
总结:
1、开个字典似乎不占什么内存,我爬了半天,才发现字典占内存还就不到30M。
2、在保证机器内存够用和下行流量够用的前提下,尽量多开线程,节约点时间。
3、用点大脑,一个好的方法/算法有时候比机器不知疲倦的干活重要的多。
爬网页
爬网页
...