zoukankan      html  css  js  c++  java
  • 增量式爬虫

     啥是增量式爬虫?

      增量式爬虫就是爬取那些更新频率很快的网站,但是我们又不想每次都删库再建库,所以有了增量式爬虫。效果是将爬虫内容在数据库中进行判断,如果不存在则存入,存在则不存入的一个爬虫。

    我们用什么数据库?

      在这里我使用的是redis数据库,因为增量式爬虫的最主要核心就是去重,而redis中有set方法,用于去重很方便。

    判断网站中的内容是否存储过的方法?

      我将网站的内容分为两种,一种是内容少的,一种是内容多的。

      内容少的就直接将数据存储到redis数据库中,然后通过数据库的查询判断一下。

      # 创建连接对象

      conn = Redis(host='127.0.0.1',port=6379)

      # 向redis数据库里面添加内容,如果返回的是1,则没有存储过内容,将爬取的内容存到数据库,如果返回的是0,则证明存储过内容,这样直接pass

      ex = conn.sadd(key,value)

      if ex == 1:

        # 发请求,获取详情页面数据

        yield scrapy.Request(url=url,callback=slef.函数名)

      else:

        pass

      内容多的就可以通过将内容进行hashlib进行唯一加密,生成数据指纹,然后判断加密内容与数据库中的内容是否一致

      # 导包

      import hashlib

      # 自己定制一种形式的数据指纹

      source = '所有数据进行内容拼接'

      # 进行hash加密

      hashValue = hashlib.sha256(source.encode()).hexdigest()

      # 然后向数据库里面存储

      ex = conn.sadd(key,hashValue)

      # 进行判断

      if ex == 1:

        # 发请求,获取详情页面数据

        yield scrapy.Request(url=url,callback=slef.函数名)

      else:

        pass

    这样就可以完成增量式爬虫的实现过程,增量式爬虫的最主要核心就是去重,解决去重方式即可,方法很多,这里只是一种方式,但是比较简单省事。

  • 相关阅读:
    vue-router HTML5 History 模式(转自官网)
    使用fastjson解析数据后导致顺序改变问题
    Mybatis一对多或多对多只能查出一条数据解决策略
    mybatis 学习教程
    Mybatis根据List批量查询List结果
    @Param注解的用法解析
    关于mybatis使用小于号大于号出错的解决方案
    if test表达式逻辑判断不能用&&
    MyBatis中传入参数parameterType类型详解
    MyBatis 判断条件为等于的问题
  • 原文地址:https://www.cnblogs.com/ifiwant/p/11756918.html
Copyright © 2011-2022 走看看