我想进行大规模的数据挖掘。为此,我需要一个快速爬虫。我只需要一些东西来下载一个网页,提取链接并递归地跟踪它们,但不需要访问同一个url两次。基本上,我想避免循环。
我已经用python编写了一个爬虫程序,但是太慢了。我不能用它饱和100兆位的线路。最高速度约为每秒40个URL。由于某些原因,很难取得更好的结果。这似乎是python的多线程/套接字的问题。我也遇到了python的gargabe收集器的问题,但这是可以解决的。顺便说一句,CPU不是瓶颈
那么,我应该使用什么来编写尽可能快的爬虫程序,以及什么是在爬虫时避免循环的最佳解决方案?
编辑:
解决方案是组合multiprocessing
和threading
模块。生成每个进程有多个线程的多个进程以获得最佳效果。在一个进程中生成多个线程是无效的,并且只有一个线程的多个进程消耗了太多的内存。
为什么不使用已经测试过的爬行工具,比如Scrapy?在内存有限(约400Mb)的低端VPS上,我设法达到了每秒100页的速度,而网络速度约为6-7MB/s(即低于100Mbps)。
您可以做的另一个改进是使用
urllib3
(特别是在从单个域中爬行多个页面时)。下面是我前段时间做的一个简短比较:更新:
现在是废纸uses the Requests library,然后是uses urllib3。这使得刮削成为绝对的工具时,刮削。最新版本还支持部署项目,因此从VPS中删除比以往任何时候都更容易。
听起来你的设计问题不仅仅是语言问题。尝试查看multiprocessing模块,以便同时访问更多站点,而不是线程。另外,考虑使用一些表来存储您以前访问过的站点(可能是数据库?)。
大约两年前我发明了一种爬行器。它每秒可以下载近250个网址。你可以让我的脚步流畅。
分发了所有webcrawler任务。每隔一段时间处理 明智的。
a.下载器
b.链路提取器
c.乌尔塞
d.所见内容
相关问题 更多 >
编程相关推荐