4

我想从某些网站抓取有用的资源(如背景图片..)。这不是一项艰巨的工作,尤其是在诸如scrapy之类的出色项目的帮助下。

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

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

  1. 爬虫将起始 URL 添加到 URL 存储库
  2. 爬虫向 URL 存储库请求最多 N 个 URL 进行爬取
  3. 爬虫获取 URL,并更新 URL 存储库中的某些信息,例如页面内容、获取时间以及内容是否已更改。
  4. 回到第 2 步

为了进一步说明,我仍然需要解决以下问题:如何确定网页的“刷新性”,即表示该网页已更新的概率?

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

4

1 回答 1

7

您描述的“批处理”算法是实现这一点的常用方法,我已经使用scrapy进行了一些这样的实现。

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

一个有趣的调整是将调度分为短期(在单个批次内,scrapy 内部)和长期(在抓取批次之间),提供更多增量方法的一些优点,同时让事情变得更简单。

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

我想推荐 Christopher Olston 和 Marc Najork 撰写的这篇Web Crawling 文章。这是一项很棒的调查,涵盖了您感兴趣的主题(批量抓取模型和抓取排序)。

于 2012-05-18T12:24:27.270 回答