web-crawler - 网络爬虫更新策略

标签 web-crawler scrapy

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

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

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

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

  • 为了进一步说明这一点,我仍然需要解决以下问题:
    如何判断一个网页的“刷新”,即该网页被更新的概率?

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

    最佳答案

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

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

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

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

    我想推荐这个 Web Crawling article克里斯托弗奥尔斯顿和马克纳约克。这是一项很棒的调查,涵盖了您感兴趣的主题(批量爬网模型和爬网排序)。

    关于web-crawler - 网络爬虫更新策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576785/

    相关文章:

    php - 网络抓取转化率并绘制图表

    php - 更快地抓取页面 [PHP]

    python - 数据收集 Urllib2+bs4 与 Scrapy

    python - Scrapy>索引错误: list index out of range

    css - 具有不同 parent 的 Scrapy 链选择器

    java - 如何使用新方法在函数内传递变量

    nutch - nutch 1.3 中重新抓取 URL

    python - Scrapy 在 django 中与 celery 随机崩溃

    python - 缺少 1 个必需的位置参数 : 'response' scrapy

    elasticsearch - 使用StormCrawler(和Elasticsearch)将字段添加到已爬网内容