快速的互联网爬虫

pbp*_*pbp 8 python multithreading web-crawler web-mining

我想做大规模的数据挖掘.为此,我需要一个快速爬虫.我只需要下载一个网页,提取链接并递归地跟踪它们,但不要访问相同的网址两次.基本上,我想避免循环.

我已经在python中编写了一个爬虫,但它太慢了.我无法用它浸透100Mbit线.最高速度约为40 urls/sec.由于某种原因,很难获得更好的结果.这似乎是python的多线程/套接字的一个问题.我也遇到了python的gargabe收集器的问题,但这是可以解决的.CPU不是btw的瓶颈.

那么,我应该使用什么来编写尽可能快的爬虫,以及在爬行时避免循环的最佳解决方案是什么?

编辑:解决方案是组合multiprocessingthreading模块.为每个进程生成多个进程的多个进程,以获得最佳效果.在单个进程中生成多个线程是无效的,只有一个线程的多个进程会消耗太多内存.

Att*_* O. 7

为什么不使用已经测试过的东西来进行爬行,比如Scrapy?我设法在具有有限RAM内存(约400Mb)的低端VPS上达到每秒近100页,而网络速度约为6-7 Mb/s(即低于100Mbps).

您可以做的另一项改进是使用urllib3(特别是在从单个域抓取许多页面时).这是我前一段时间的简短比较:

urllib基准

更新:

Scrapy现在使用Requests库,后者又使用urllib3.这使得Scrapy成为刮擦时的绝对首选工具.最新版本还支持部署项目,因此从VPS中抓取比以往更容易.


Tor*_*ler 1

听起来你的设计问题不仅仅是语言问题。尝试研究多处理模块以同时访问更多站点而不是线程。另外,考虑获取一些表来存储您以前访问过的网站(也许是数据库?)。