Web crawler 如何抓取数十亿页?

Web crawler 如何抓取数十亿页?,web-crawler,Web Crawler,可以在一台服务器上抓取数十亿页吗?hmm。。如果你可以每秒“爬行”1页,那么你每天可以总共爬行86400页(完成10亿页需要11574.074天,根据每秒页面速度计算所需时间)。。 需要耐心。。 当然还有存储空间 大规模爬行(10亿页)是一个难题。以下是一些问题: 网络带宽。假设每个页面都是10Kb,那么您所说的总共是10Kb 需要获取10 TB的数据 网络延迟/服务器速度慢/拥塞意味着您无法实现与网络连接的理论带宽类似的效果。多线程你的爬虫只能帮这么多 我假设您需要存储从数十亿页中提取的信息

可以在一台服务器上抓取数十亿页吗?

hmm。。如果你可以每秒“爬行”1页,那么你每天可以总共爬行86400页(完成10亿页需要11574.074天,根据每秒页面速度计算所需时间)。。 需要耐心。。 当然还有存储空间

大规模爬行(10亿页)是一个难题。以下是一些问题:

  • 网络带宽。假设每个页面都是10Kb,那么您所说的总共是10Kb 需要获取10 TB的数据

  • 网络延迟/服务器速度慢/拥塞意味着您无法实现与网络连接的理论带宽类似的效果。多线程你的爬虫只能帮这么多

  • 我假设您需要存储从数十亿页中提取的信息

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

  • 为了避免陷入循环,您需要检测到您已经“完成了此页面”

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

  • 您需要处理“robots.txt”和其他控制(行为良好的)爬虫行为的约定


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

即使是搜索游戏中的一个小玩家,也会对爬过的页面进行数十亿次的编号

“2006年,谷歌索引了超过250亿个网页,[32]每天4亿次查询,[32]13亿张图片,以及超过10亿条Usenet消息。”-维基百科 记住这句话提到的是2006年的数字。这是古老的历史。最先进的技术远远不止于此

内容新鲜度:

  • 不断以非常高的速度添加新内容(现实)
  • 现有页面经常更改-您需要重新爬网,原因有两个:a)确定页面是否已死亡;b)确定内容是否已更改。 爬虫的礼貌:

  • 你不能压倒任何一个给定的网站。如果你从同一IP重复访问任何主要站点,你很可能会触发验证码提示,或者他们会阻止你的IP地址。网站会根据带宽、请求频率、“坏”页面请求的数量以及各种其他因素来实现这一点。
  • 有一个robots.txt协议,站点向爬虫公开,遵守它。
  • 有一个站点地图标准,站点向爬虫公开,使用它来帮助您探索-您还可以(如果您选择)对站点上页面的相对重要性进行加权,并使用站点地图中指示的缓存中的生存时间。 减少你需要做的工作:

  • 通常,站点通过多个名称公开自己-您可能希望检测相同的页面-这可能发生在同一url或不同的url上。考虑页面内容上的哈希(带有持续变化的日期/时间的减号头)。跟踪这些页面等价性,下次跳过它们,或者确定给定站点之间是否存在已知的映射,这样就不必对它们进行爬网。
  • 垃圾邮件。成千上万的人在那里制作成吨的网页,这些网页只是传递给谷歌,但他们在网络上“播种”自己,让自己被抓取。 所以-你总是处于爬行的循环中。总是。您几乎肯定会在多台(许多)机器上。以确保你能遵守礼貌,但仍然坚持数据的新鲜度

    如果您想按下快进按钮,只需使用自己独特的算法处理页面。。。。如果你需要的话,你可能会很快进入一个预构建的爬虫程序——想想中突出显示的“80条腿”。他们使用客户端计算能力来实现这一点

    “80条腿”使用的是孩子们在网站上玩游戏的机器自行车。设想一个网页上的后台进程,当您使用该网页/站点时,它确实会发出呼叫并工作,而您却不知道,因为它们使用的是Plura技术堆栈

    “Plura Processing为分布式计算开发了一种新的创新技术。我们正在申请专利的技术可以嵌入到任何网页中。这些网页的访问者成为节点,为在我们的分布式计算网络上运行的应用程序执行非常小的计算。”-Plura演示页 因此,他们在数千个IP上的数千个节点上发布“爬网”命令,并对站点保持礼貌,因此爬网速度很快。现在,我个人不知道我是否喜欢那种使用最终用户浏览器的风格,除非所有使用他们技术的网站都非常清楚地显示出这种风格——但如果没有其他东西的话,这是一种开箱即用的方法

    在社区驱动的项目中,您可能也可以使用其他已编写的爬虫程序

    正如其他受访者所指出的那样——做数学题。你需要每秒爬行2300页才能跟上每5天爬行1B页的速度。如果你愿意再等一段时间,这个数字就会下降。如果你认为你要爬超过1B,这个数字就会上升。简单的数学


    祝你好运

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

    爬行时需要做三件主要的事情:(1)选择下一步爬行的内容,(2)获取这些页面,(3)存储这些页面。对于(1)您需要实现某种优先级队列(即,进行广度优先搜索或OPIC),您还需要跟踪您去过的地方。这可以使用布卢姆过滤器完成。Bloom过滤器(在Wikipedia上查找)也可用于存储页面是否有robot.txt文件以及给定url的前缀是否为