如何抓取/索引经常更新的网页的策略?

时间:2012-04-26 10:38:22

标签: web-crawler search-engine

我正在尝试构建一个非常小的小众搜索引擎,使用Nutch来抓取特定网站。一些网站是新闻/博客网站。如果我抓取,例如techcrunch.com,并存储和索引他们的首页或任何主页,那么在几小时内我的索引就会过时。

像Google这样的大型搜索引擎是否有一种算法可以非常频繁地每小时重新抓取经常更新的网页?或者它只是经常更新的页面得分非常低,所以他们不会被退回?

我如何在自己的应用程序中处理此问题?

4 个答案:

答案 0 :(得分:26)

好问题。这实际上是WWW研究社区的一个活跃话题。涉及的技术称为重新抓取策略页面刷新政策

据我所知,文献中考虑了三个不同的因素:

  • 更改频率(更新网页内容的方式)
    • [1]:正式化了数据“新鲜度”的概念,并使用poisson process来模拟网页的变化。
    • [2]:频率估算器
    • [3]:更多调度政策
  • 相关性(更新的网页内容对搜索结果的影响程度)
    • [4]:为查询搜索引擎的用户提供最佳的用户体验质量
    • [5]:确定(几乎)最佳爬行频率
  • 信息长寿(随着时间的推移,网页上出现和消失的内容片段的生命周期,显示与更改频率无明显关联)
    • [6]:区分短暂和持久内容

您可能想要确定哪个因素对您的应用程序和用户更重要。然后,您可以查看以下参考资料以了解更多详情。


编辑:我简要讨论了[2]中提到的频率估算器,以帮助您入门。基于此,您应该能够在其他论文中找出对您有用的内容。 :)

请按照我在下面指出的顺序阅读本文。只要你知道一些概率和统计数据101(如果你只是采用估算公式可能会少得多),那就不应该太难理解了:

步骤1.请转到部分 6.4 - 应用程序到Web爬网程序。 Cho在此列出了估算网页更改频率的3种方法。

  • 统一政策:抓取工具以每周一次的频率重新访问所有网页。
  • 天真的政策:在前5次访问中,抓取工具会按频率访问每个页面 每周一次。在5次访问之后,爬虫估计变化频率 使用天真估算器的页面(第4.1节)
  • 我们的政策:抓取工具使用建议的估算工具(第4.2节)来估算变更频率。

步骤2.天真的政策。请转到第4节。您将阅读:

  

直观地说,我们可能会使用X/TX:检测到的更改次数T:监控期间)作为估算的变化频率。

后续部分4.1刚刚证明这种估计偏向于 7 ,in-consistant 8 和in-efficient {{ 3}}

步骤3.改进的估算器。请转到4.2节。新的估算工具如下所示:enter image description here

其中\bar Xn - X(元素未更改的访问次数),n是访问次数。因此,只需采用此公式并估算变化频率。您无需了解本小节其余部分的证据。

步骤4.第4.3节和第5节中讨论的一些技巧和有用的技巧可能对您有所帮助。第4.3节讨论了如何处理不规则的间隔。第5节解决了这个问题:当元素的最后修改日期可用时,我们如何使用它来估计变化频率?使用最后修改日期的建议估算器如下所示:

enter image description here

论文中图10之后对上述算法的解释非常清楚。

步骤5.现在,如果您有兴趣,可以在第6节中查看实验设置和结果。

就是这样。如果您现在感到更自信,请继续尝试[1]中的新鲜纸。


<强>参考

[1] 9

[2] http://oak.cs.ucla.edu/~cho/papers/cho-tods03.pdf

[3] http://oak.cs.ucla.edu/~cho/papers/cho-freq.pdf

[4] http://hal.inria.fr/docs/00/07/33/72/PDF/RR-3317.pdf

[5] http://wwwconference.org/proceedings/www2005/docs/p401.pdf

[6] http://www.columbia.edu/~js1353/pubs/wolf-www02.pdf

答案 1 :(得分:6)

谷歌的算法大多是关闭的,他们不知道他们是如何做的。

我使用directed graph的概念构建了一个抓取工具,并基于页面“degree centrality上的重新抓取率。您可以将网站视为有向图,其中页面为节点,超链接为边缘。具有高中心性的节点可能是更频繁更新的页面。至少,这是假设。

这可以通过存储URL和它们之间的链接来实现。如果您抓取并且不丢弃任何链接,则每个站点的图表将会增长。通过计算每个站点的每个节点,(标准化的)in-anddedegree将为您提供一个衡量哪个页面最有趣的重新爬行的方法。

答案 2 :(得分:2)

尝试在更新频率上保留每个首页统计信息。检测更新很容易,只需存储ETag/Last-Modified并在下次请求时发回If-None-Match/If-Updated-Since标头。保持running average更新频率(例如最后24次抓取)可以让您相当准确地确定前台的更新频率。

在抓取首页后,您将确定何时需要进行下一次更新,并在该时间段内将新的抓取作业放入存储桶中(一小时的存储桶通常是快速和礼貌之间的良好平衡)。每小时您只需获取相应的存储桶并将作业添加到作业队列中。像这样,您可以拥有任意数量的抓取工具,并且仍然可以控制各个抓取的时间安排。

答案 3 :(得分:2)

在任何想象中我都不是这个主题的专家,但站点地图是缓解这个问题的一种方法。

  

用最简单的术语来说,一个XML Sitemap(通常称为Sitemap),带有   capital S-是您网站上的页面列表。创造和   提交Sitemap有助于确保Google了解所有内容   您网站上的网页,包括可能无法被发现的网址   Google正常的抓取过程。   此外,您还可以使用站点地图向Google提供元数据   关于您网站上特定类型的内容,包括视频,图片,   移动和新闻。

Google专门用它来帮助他们抓取新闻网站。您可以在站点地图上找到有关Google新闻和站点地图here的更多信息here

通常,您可以在网站的robots.txt中找到Sitemaps.xml。例如,TechCrunch的Sitemap只是

http://techcrunch.com/sitemap.xml

将此问题定期解析为xml。如果您在robots.txt中找不到它,您可以随时联系网站管理员,看看他们是否会提供给您。

更新2012年10月24日上午10:45,

我与我的一位团队成员交谈,他给了我一些关于我们如何处理这个问题的额外见解。我想重申,这不是一个简单的问题,需要大量的部分解决方案。

我们要做的另一件事是监视几个“索引页面”以了解给定域的更改。采取 例如纽约时报。我们在以下位置为顶级域创建一个索引页面:

http://www.nytimes.com/

如果您查看该页面,您可以注意到其他子区域,如世界,美国,政治,商业等。我们为所有这些区域创建了额外的索引页面。 Business有额外的嵌套索引页面,如Global,DealBook,Markets,Economy等。一个url有20多个索引页面并不罕见。如果我们注意到索引上添加了任何其他URL,我们会将它们添加到队列中进行爬网。

显然这非常令人沮丧,因为您可能需要手动为每个要抓取的网站执行此操作。您可能需要考虑支付解决方案。我们使用SuprFeedr并对此非常满意。

此外,许多网站仍然提供RSS,这是一种有效的抓取页面的方式。我仍然建议您与网站站长联系,看看他们是否有任何简单的解决方案来帮助您。