快速实习生

2024-05-14 22:22:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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


Tags: 程序数据挖掘url网页进程链接原因解决方案
3条回答

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

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

urllib benchmark

更新:

现在是废纸uses the Requests library,然后是uses urllib3。这使得刮削成为绝对的工具时,刮削。最新版本还支持部署项目,因此从VPS中删除比以往任何时候都更容易。

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

大约两年前我发明了一种爬行器。它每秒可以下载近250个网址。你可以让我的脚步流畅。

  1. 优化文件指针的使用。尝试使用最小的文件指针。
  2. 不要每次都写数据。尝试在之后转储数据 存储大约5000个url或10000个url。
  3. 为了您的健壮性,您不需要使用不同的配置。 尝试使用日志文件,如果要继续,请尝试 读取日志文件并继续爬网程序。
  4. 分发了所有webcrawler任务。每隔一段时间处理 明智的。

    a.下载器

    b.链路提取器

    c.乌尔塞

    d.所见内容

相关问题 更多 >

    热门问题