我想从某些网站抓取有用的资源(如背景图片..)。这不是一项艰巨的工作,尤其是在一些很棒的项目(如scrapy)的帮助下。
这里的问题是我不仅只想抓取这个网站一次。我还想保持我的爬网长时间运行并爬网更新的资源。所以我想知道网络爬虫有没有什么好的策略来获取更新的页面?
这是我想到的一个粗略算法。我将抓取过程分为几轮。每轮 URL 存储库都会为爬虫提供一定数量(例如 10000 个)的 URL 进行爬取。然后下一轮。详细步骤是:
为了进一步说明这一点,我仍然需要解决以下问题:
如何判断一个网页的“刷新”,即该网页被更新的概率?
由于这是一个悬而未决的问题,希望它能在这里带来一些富有成果的讨论。
最佳答案
您描述的“批处理”算法是实现此目的的常用方法,我已经使用 scrapy 进行了一些此类实现。 .
我采取的方法是初始化您的蜘蛛启动 URL,以便正常抓取和输出数据(资源 + 链接)的下一批。然后在您选择生成下一批时处理这些。可以将所有这些并行化,因此您有许多蜘蛛同时抓取不同的批次,如果您将属于同一站点的 URL 放在同一批次中,那么scrapy 将负责礼貌(根据您的喜好进行一些配置)。
一个有趣的调整是将调度分为短期(在单个批次内,在scrapy 内)和长期(在爬行批次之间),从而提供更多增量方法的一些优点,同时使事情变得更简单。
您提到的抓取排序问题有很多方法(如何确定“新鲜度”),最好的方法取决于您的优先级(新鲜度与全面性,资源比其他资源更重要等) .
我想推荐这个 Web Crawling article克里斯托弗奥尔斯顿和马克纳约克。这是一项很棒的调查,涵盖了您感兴趣的主题(批量爬网模型和爬网排序)。
关于web-crawler - 网络爬虫更新策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2576785/