首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >快速网络爬虫

快速网络爬虫
EN

Stack Overflow用户
提问于 2011-10-05 03:51:08
回答 5查看 7.2K关注 0票数 8

我想进行大规模的数据挖掘。为此,我需要一个快速爬虫。所有我需要的是下载一个网页,提取链接和递归跟随他们,但不访问相同的网址两次。基本上,我想避免循环。

我已经用python写了一个爬虫,但是太慢了。我不能用它来饱和100Mbit线。最高速度约为40个urls/秒。由于某些原因,很难得到更好的结果。这似乎是python的多线程/套接字的问题。我也遇到了python的gargabe收集器的问题,但这是可以解决的。顺便说一句,CPU不是瓶颈。

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-05 03:57:01

听起来你遇到的是设计问题而不是语言问题。尝试查看multiprocessing模块,以便同时访问更多站点,而不是线程。另外,考虑使用一些表来存储您以前访问过的站点(也许是一个数据库?)。

票数 1
EN

Stack Overflow用户

发布于 2011-10-05 04:02:58

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

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

更新:

Scrapy现在是uses the Requests library,这又反过来uses urllib3。这使得Scrapy成为抓取的绝对首选工具。最近的版本也支持部署项目,因此从VPS中抓取比以往任何时候都更容易。

票数 8
EN

Stack Overflow用户

发布于 2012-07-18 18:57:57

大约2年前,我开发了一个爬虫。而且它每秒可以下载近250个And。你可以跟着我的脚步走。

  1. 优化您的文件指针使用。尽量使用最小的文件指针。
  2. 不要每次都写入数据。尝试在存储了大约5000url或10000 url之后转储数据。
  3. 为了您的健壮性,您不需要使用不同的配置。尝试使用日志文件,当您想要恢复时,只需尝试读取日志文件并恢复您的crawler.
  4. Distributed所有webcrawler任务。并以间隔的方式处理它。

a.下载器

b.链接提取器

c. URLSeen

d. ContentSeen

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7653276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档