【问题标题】:guide on crawling the entire web?抓取整个网络的指南?
【发布时间】:2011-01-06 00:39:11
【问题描述】:

我只是有这个想法,想知道是否可以在单个专用服务器(如 Core2Duo、8gig ram、750gb 磁盘 100mbps)上抓取整个网络(就像大男孩一样!) .

我看到一篇论文就是这样做的……但我不记得这篇论文的标题了。这就像使用某种统计模型在单个专用服务器上抓取整个网络。

无论如何,想象一下从大约 10,000 个种子 URL 开始,然后进行详尽的爬网......

有可能吗?

我需要抓取网络,但仅限于专用服务器。我该怎么做,是否已经有开源解决方案?

例如查看这个实时搜索引擎。 http://crawlrapidshare.com 结果非常好并且最新更新....他们是怎么做到的?

【问题讨论】:

  • 祝您旅途愉快。
  • 很好奇从单台机器上抓取 50% 的网络需要多长时间(即使在 FAT 管道上,真正的交易核心有大量 RAM 和 HDD 空间)。多久?有什么预测吗?
  • google 每天抓取 40 亿个网页,但仍然无法抓取整个网络。
  • 平均页面大小 = 30kB。你的 100mpbs 每天会给你 4000 万,这只是理论上的。是的,你的 CPU 无法赶上解析它们的速度。
  • 截至 2014 年,基于我对超过 2.5 亿页的抓取的平均页面大小约为 70kB。

标签: web-crawler


【解决方案1】:

抓取网络在概念上很简单。将 Web 视为一个非常复杂的有向图。每个页面都是一个节点。每个链接都是一条有向边。

您可以假设一个精心选择的起点最终会导致所有其他点(最终)。这不会完全正确,但在实践中,我认为您会发现它大部分是正确的。您仍然可能需要多个(可能是数千个)起点。

您需要确保不会两次遍历同一页面(在一次遍历中)。实际上,遍历将花费很长时间,以至于它只是一个问题,即您回到特定节点之前需要多长时间,以及您如何检测和处理更改(意味着您第二次访问可能已更改的页面)。

关键在于您需要存储多少数据,以及一旦获得这些数据后您想用它做什么。

【讨论】:

  • 将整个字典发送到 google.com 即可开始您的抓取;)
【解决方案2】:

很抱歉这么久才恢复这个帖子,但我只想指出,如果您只需要一个非常大的网络数据集,那么有一种比自己尝试爬取整个网络更简单的方法来获取它单服务器:只需下载Common Crawl project提供的免费爬取数据库。用他们的话说:

我们建立并维护一个开放的网络爬虫数据存储库,任何人都可以访问和分析。

截至今天,他们的数据库大小为 PB,包含数十亿页(数万亿个链接)。只需下载它,然后在那里执行您感兴趣的任何分析。

【讨论】:

  • 是的,它在 Amazon EC2 上,考虑到处理普通爬网的疯狂价格,它绝对毫无价值。自己做会便宜很多。而且它很旧,没有重复数据删除,并且包含所有可能数据的巨大组合。
  • @Lothar 如果您只处理说 URL,我认为有人编译了它。你今天还在爬吗?
  • 否,这个项目于 2017 年结束。您是否尝试做类似反向链接服务之类的只需要 URL 的事情?这是我们想要建立的副作用业务之一。
【解决方案3】:

我相信您所指的论文是“IRLbot:扩展到 60 亿页及以上”。这是德克萨斯 A&M 的学生编写的单服务器网络爬虫。

撇开带宽、磁盘空间、抓取策略、robots.txt/politeness 等问题不谈——我的主要问题是“为什么?”爬取整个网络意味着您正在使用来自数百万网络服务器的共享资源。目前大多数网站管理员都允许机器人抓取它们,前提是它们表现良好并遵守礼貌抓取的隐式和显式规则。

但是,每一个在没有明显好处的情况下敲击网站的大容量机器人都会导致更多的网站对除了大男孩(Google、Yahoo、Bing 等)之外的所有网站关闭大门。所以你真的想在花太多时间在如何做之前先问为什么这个问题。

假设您确实需要在单个服务器上抓取大部分网络,那么您需要获得更粗的管道、更多的存储空间(例如,假设每页 2K 压缩文本,那么 1B 页面需要 2TB )、更多 RAM、至少 4 个真正的内核等。IRLbot 论文将是您的最佳指南。您可能还想查看 crawler-commons 项目以获取可重用的 Java 代码块。

最后要提醒一句。一个无辜的错误很容易引发网站问题,此时您将处于愤怒的网站管理员火焰的接收端。所以请确保你的皮肤很厚:)

【讨论】:

    【解决方案4】:

    查看此替代解决方案,具体取决于您希望如何处理这么多数据(即使可能):http://searchenginewatch.com/2156241

    ... 编辑:另外,不要忘记,网络一直在变化,所以即使是相对较小的爬虫操作(例如从大量来源聚合列表的分类网站)也会循环刷新它们的爬虫,比如说,就像一个24小时的循环。那时,网站所有者可能会或可能不会开始因爬虫在其服务器上的负载而感到不便。然后根据你如何使用爬取的内容,你需要考虑重复数据删除,因为你需要教你的系统识别昨天的爬取结果是否与今天的不同等等......变得非常“模糊” ",更不用说所需的计算能力了。

    【讨论】:

    • 链接已损坏 :(
    【解决方案5】:

    用于检测你去过哪里的布隆过滤器。

    会有误报,但您可以通过实施多个布隆过滤器并旋转添加的布隆过滤器并创建一个令人印象深刻的长度的过滤器来解决这个问题。

    http://en.wikipedia.org/wiki/Bloom_filter

    【讨论】:

      【解决方案6】:

      我敢打赌这是可能的。你只需要一个量子 CPU 和量子 RAM。

      说真的,单个服务器无法赶上整个网络的增长。 Google 使用大量服务器(数万甚至数十万),它无法为您提供即时索引。

      我猜如果您仅限于一台服务器并且需要抓取整个网络,那么您确实需要抓取的结果。与其关注“如何抓取网络”,不如关注“如何使用 Google 提取您需要的数据”。一个很好的起点是:Google AJAX Search API

      【讨论】:

      • 很久以来,Google 已经取消了通过 API 自动化和重复使用搜索结果的所有合法方式。这只可能是非法的,谷歌每次查询都不会返回超过 400 个结果,并且自定义搜索和结果的方式非常非常非常非常非常有限。
      【解决方案7】:

      听起来可能,但两个真正的问题是网络连接和硬盘空间。作为一个对网络爬虫几乎一无所知的人,我会从几 TB 的存储空间开始,随着我积累更多的信息和良好的宽带互联网连接而逐步提高。为此必须有一个大口袋!

      【讨论】:

      • 当我们谈论网络抓取时,我怀疑 TB 是正确的单位。 Google 每天处理大约 20 PB 的数据。阅读摘要:portal.acm.org/citation.cfm?doid=1327452.1327492
      • 是的,但我严重怀疑是否有人可以通过宽带连接抽取 PB...
      • Peta 字节意味着搜索查询等等,而不仅仅是页面。
      • 对于一个搜索引擎,你可以和一台 10GBit 的机器相处。但是你必须把它分成几部分并将它们发送到物理大陆。谷歌搜索没有你想象的那么大。请记住,DuckDuckGo 是一位单身家庭父亲,他在地下室创造了它。只有 40 亿页仍然表现良好。
      【解决方案8】:

      我只是想知道整个 Internet 应该大于 750 GB。此外,为网页索引而设计的数据结构也需要大量存储空间。

      【讨论】:

      • 如果您以良好的方式存储索引,您将能够将大量信息填充到您的 750GB 硬盘上。没有人说爬虫应该存储它遇到的每个网页的所有数据。例如,它可以检查它是否是社交网站(myface、spacebook、tweeter、lurkedin、论坛或其他不感兴趣的页面)。但是,如果它是一个包含源代码的页面,它可以用一个位标记它,并将提取的信息存储在一个 hashref'ed 文件中(对于初学者来说)。
      猜你喜欢
      • 2016-10-14
      • 2020-06-29
      • 2022-11-28
      • 1970-01-01
      • 2011-05-31
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多