Web爬网程序更新策略

时间:2010-04-05 03:28:56

标签: web-crawler scrapy

我想从某些网站抓取有用的资源(如背景图片..)。这不是一项艰苦的工作,特别是在一些精彩的项目如scrapy的帮助下。

这里的问题是我不仅希望一次抓取这个网站。我还想让我的爬网长时间运行并抓取更新的资源。所以我想知道网络抓取工具有什么好的策略来获取更新的页面吗?

这是我想到的粗略算法。我将抓取过程分为几轮。每轮URL存储库将为爬网程序提供一定数量(如10000)的URL进行爬网。然后是下一轮。详细步骤如下:

  1. 抓取工具将起始网址添加到网址存储库
  2. 抓取工具要求网址存储库最多抓取N个网址
  3. 抓取工具获取网址,并更新网址存储库中的某些信息,例如网页内容,获取时间以及内容是否已更改。
  4. 回到第2步
  5. 为了进一步说明,我仍然需要解决以下问题: 如何确定网页的“刷新”,表明此网页已更新的概率?

    由于这是一个悬而未决的问题,希望它会在这里带来富有成果的讨论。

1 个答案:

答案 0 :(得分:7)

您描述的“批处理”算法是实现此目的的常用方法,我使用scrapy进行了一些此类实现。

我采用的方法是初始化您的蜘蛛起始URL以使下一批抓取并正常输出数据(资源+链接)。然后在您选择生成下一批时处理这些。可以将所有这些并行化,因此您可以同时抓取不同批次的蜘蛛,如果您将属于同一站点的URL放在同一批次中,则scrapy将负责礼貌(根据您的偏好设置一些配置)。

一个有趣的调整是将调度分解为短期(在一个批次内,在scrapy内)和长期(在爬行批次之间),提供更多增量方法的一些优点,同时保持事情稍微简单一些。

您提到的爬网排序问题有多种方法(如何确定“刷新”),最佳方法取决于您的优先级(新鲜度与全面性,资源比其他资源更重要,等)。

我想推荐Christopher Olston和Marc Najork的Web Crawling article。这是一项很棒的调查,涵盖了您感兴趣的主题(批量爬行模型和爬网排序)。