如何抓取数十亿页?

时间:2009-12-20 07:40:56

标签: web-crawler

是否可以在单个服务器上抓取数十亿个页面?

6 个答案:

答案 0 :(得分:37)

如果您希望数据是最新的,则不是。

即使是搜索游戏中的小玩家也会将数十亿的网页编号。

“2006年,谷歌已经索引超过250亿个网页,[32]每天4亿次查询,[13] 13亿张图片,以及超过10亿条Usenet消息。” - 维基百科

请记住引用提到了2006年的数字。这是古老的历史。最先进的技术远不止于此。

内容的新鲜度:

  1. 新内容不断以极快的速度增加(现实)
  2. 现有页面经常更改 - 您需要重新抓取,原因有两个:a)确定它是否已死,b)确定内容是否已更改。

抓取者的礼貌:

  1. 你不能压倒任何一个给定的网站。如果您从同一IP重复访问任何主要站点,您可能会触发CAPTCHA提示或他们将阻止您的IP地址。站点将根据带宽,请求频率,“坏”页面请求数以及各种其他内容执行此操作。
  2. 有一个robots.txt协议,网站向抓取工具公开,遵守它。
  3. 有一个站点地图标准,网站向抓取工具展示,使用它来帮助您探索 - 您还可以(如果您选择)衡量网站上网页的相对重要性以及使用时间您的缓存,如果在站点地图中指示。

减少您需要做的工作:

  1. 网站通常会通过多个名称展示自己 - 您需要检测相同的网页 - 这可能发生在同一个网址或单独的网址上。考虑页面内容的哈希值(减去日期/时间不断变化的标题)。跟踪这些页面等效性并在下次跳过它们或确定给定站点之间是否存在众所周知的映射,以便您不必抓取它们。
  2. 垃圾邮件。很多人在那里制作大量的页面,只是通过谷歌,但他们在网络上“种子”自己爬行。

所以 - 你总是处于爬行的循环中。总是。你几乎肯定会在几台(很多很多)机器上。确保你能够遵守礼貌但仍然坚持数据的新鲜度。

如果您想按下快进按钮,只需使用自己独特的算法处理页面......如果您需要快速使用,可以使用预先构建的爬虫 - 将“80条腿”视为突出显示在Programmable Web。他们使用客户端计算能力来做到这一点。

80条腿正在使用孩子们在网站上玩游戏的机器周期。想一想网页上的后台进程,当你使用该页面/站点时,它会调出并运行,因为他们使用的是Plura技术堆栈。

“Plura Processing为分布式计算开发了一种新的创新技术。我们正在申请专利的技术可嵌入任何网页。这些网页的访问者成为节点,并为在我们的分布式计算网络上运行的应用程序执行非常小的计算。“ - Plura Demo Page

因此,他们通过成千上万个IP的数千个节点发出“爬行”,并且对网站表示礼貌并因此快速爬行。现在我个人不知道我关心使用最终用户浏览器的那种风格,除非它在所有网站上使用他们的技术非常清楚地调出 - 但是如果没有别的话,这是一种开箱即用的方法。

还有其他一些已经编写的抓取工具,这些抓取工具也可以在社区驱动的项目中使用。

正如其他受访者所指出的 - 做数学。您需要每秒抓取~2300页,以跟上每5天抓取1B页的速度。如果你愿意等待更长时间,那么这个数字会下降。如果你认为你的爬行次数超过了1B,那么这个数字会上升。简单的数学。

祝你好运!

答案 1 :(得分:18)

大规模蜘蛛(十亿页)是一个难题。以下是一些问题:

  • 网络带宽。假设每页都是10Kb,那么你所说的总共是 提取10太字节。

  • 网络延迟/慢速服务器/拥塞意味着您无法实现网络连接的理论带宽。对您的抓取工具进行多线程处理只会有很大的帮助。

  • 我认为您需要存储从数十亿页中提取的信息。

  • 您的HTML解析器需要处理以各种奇怪方式破坏的网页。

  • 为避免卡在循环中,您需要检测到您“已经完成此页面”。

  • 页面发生变化,因此您需要重新访问它们。

  • 您需要处理'robots.txt'以及其他约定(良好行为)抓取工具的约定。

答案 2 :(得分:8)

Page和Brin(谷歌)1998年的原始论文描述了在10天内在4台机器上爬行2500万页。他们每台机器一次打开300个连接。我觉得这还不错。在我自己的运行Linux的现成机器的实验中,我可以可靠地打开100-200个同时连接。

抓取时需要做三件事:(1)选择接下来要抓取的内容,(2)获取这些页面,(3)存储这些页面。对于(1)你需要实现某种优先级队列(即,进行广度优先搜索或OPIC),你还需要跟踪你曾经去过的地方。这可以使用Bloom过滤器完成。 Bloom过滤器(在维基百科上查找)也可用于存储页面是否有robot.txt文件以及是否排除了给定网址的前缀。

(2)获取页面是一个固定的成本,你不能做太多的事情;但是,在一台机器上,你受限于开放连接的数量,如果你有电缆,你可能不会接近吃所有可用的带宽。您可能不得不担心带宽上限。

(3)存储页面通常在Web存档文件中完成,就像Internet Archive一样。通过压缩,您可以在7TB内存储10亿页,因此存储方面,拥有10亿页可以负担得起。作为对一台机器可以做什么的估计,假设你得到一台价格低廉的200美元机器,配备1Gb或RAM和160Gb硬盘。每页20KB(使用Range请求以避免吞噬整个大页面),1000万页需要200 GB,但压缩大约70 GB。

如果您保留了搜索引擎运行的存档(您已经计算出的页面排名和bm25),以及活动的爬网存档,那么您已经消耗了140 GB。这为您需要处理的其他随机内容留下了大约20 GB。如果你计算出内存,你需要尝试尽可能多地保留优先级队列和BloAM过滤器,你也正好处于可能的边缘。如果您每天抓取300,000页,那么您需要花费一个多月的时间/ 1000万页抓取

答案 3 :(得分:8)

问题提出后5年,我可以回答是。

我们的爬行机甚至不再昂贵了,它可以被EBay购买大约3000欧元,并包含24x1TB 2,5“磁盘(作为单磁盘运行)和两个6核英特尔Xeon(使其成为12核心/ 24线程)和96GB RAM使用卢森堡数据中心的10GBit线路(仅有33%的百分位数)。

它使用100,000个并发HTTP连接,每秒抓取大约30,000个页面。

是的,计算机今天非常快。顺便说一下,主要问题是URL处理和页面重复检测(可以通过各种方式访问​​相同的页面),但不是网络连接。

答案 4 :(得分:4)

德克萨斯A& M的研究人员创建了IRLbot,它具有高度可扩展性,能够在短时间内(10亿~7天内)以极少的资源抓取数十亿个网页(即个人数量)。德克萨斯A& M研究人员为他们的爬虫提供了以下统计数据:

  

我们提供一套处理这些问题和测试的技术   他们在我们称之为IRLbot的实现中的表现。在我们最近   实验持续了41天,IRLbot在一台服务器上运行   成功抓取了63亿个有效的HTML页面(76亿美元)   连接请求)并且平均下载率为319   Mb / s(1,789页/秒)。与我们之前的算法实验不同   在相关工作中提出,这个版本的IRLbot没有经验   任何瓶颈和成功处理的内容超过1.17亿   主机,解析了3940亿个链接,并发现了一个子集   具有410亿个唯一节点的网络图。

您可以在发表的论文中了解其抓取工具的设计和架构, IRLbot: Scaling to 6 Billion Pages and Beyond,或full paper (very detailed)

但是,抓取速度很大程度上取决于您的带宽和您正在处理的数据量。因此,根据上述统计数据,我们可以看到德克萨斯A& M具有大约319 Mbps的连接速度(比美国家庭平均连接快约100倍),每页处理大约22 kB的数据,并且正在下载1,789页/秒。 如果您要在家庭连接上运行其抓取工具,您可以获得以下效果:

  • @ 3.9 Mbps(美国居民的平均速度)/每页22 KB =每秒22页:下载10亿页需要大约526天(〜1。5年)。
  • @ 20 Mbps(家庭带宽的上端)/ 22 kB / page = ~116 pps:下载10亿页需要大约100天(~3个月)。

答案 5 :(得分:2)

嗯..如果你每秒可以“抓取”1页,那么你每天可以总共86400页(完成你的第一个十亿需要11574.074天,根据你的页面每秒速度计算所需的时间)。 耐心是必需的.. 当然还有存储空间..

相关问题