• 爬虫 DATA/URL 去重


    爬虫 DATA/URL 去重

    舆情业务必须紧盯网站是否有新的内容发布,要求是越快越好,但由于各项软硬件限制,通常会要求在 30 分钟内或者 15 分钟内监听到新内容。要实现对目标网站内容变化的监听,那么我们可以选择的比较好的方式就是轮询。不停地访问网页,并且判断是否有“新内容”出现,如果有的话就执行爬取,没有“新内容”就不爬取。

    那么问题来了,应用程序如何知道哪些内容是“新的”、哪些内容又是“旧的”的呢?

    问题拆解一下,“新内容”就是没有爬过的内容。这时候我们需要用一个东西来记录这篇文章是否被爬取过,每次有要爬取的文章时就比对一下,这就是解决这个问题的办法。

    那又依靠什么来进行比对呢?

    我们都知道文章的 URL 几乎都是不变且不会重复的,因此可以选择文章的 URL 作为判定的依据,也就是把爬取过的 URL 放到一个类似列表一样的容器里存储起来,每次有待爬取的 URL 就判断它是否已经被存在容器里,如果在就说明已经爬过了,直接丢弃,进入下一个 URL 的判断流程。整体逻辑就像下面这张图一样:

     

    这就是爬虫领域的“去重”。实际上去重可以粗略的分为内容(DATA)去重和链接(URL)去重,这里我们讲的只是舆情方向的去重需求,如果是电商方向的去重,那么就不能用 URL 作为判断依据,因为电商爬虫(例如比价软件)的目的主要是判断价格的变化,这时候判断变化的依据应该是商品的关键信息(例如价格、折扣),也就是 DATA 去重。

    去重的原理明白了,那用什么东西作为存放去重依据的容器呢?MySQL?Redis?MongoDB?内存?实际上大部分工程师都选择 Redis 作为存放去重依据的容器,但实际上 MySQL、MongoDB 和内存都是可以充当容器的,至于为什么会选择 Redis,它又比其他数据存储好在哪里?

  • 相关阅读:
    设计模式(十五)---桥梁模式
    设计模式(十四)---门面模式
    设计模式(十三)---享元模式
    设计模式(十二)---代理模式
    设计模式(十一)---装饰者模式
    设计模式(十)---合成模式
    设计模式(九)---缺省适配器模式
    设计模式(八)---适配器模式
    设计模式(七)---原始模型模式
    一张图看懂JavaScript中数组的迭代方法:forEach、map、filter、reduce、every、some
  • 原文地址:https://www.cnblogs.com/andy0816/p/15245263.html
Copyright © 2020-2023  润新知