• scrapy框架增量爬虫


    一 增量式爬虫

    什么时候使用增量式爬虫:

    增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据。如一些电影网站会实时更新最近热门的电影。那么,当我们在爬虫的过程中遇到这些情况时,我们是不是应该定期的更新程序以爬取到更新的新数据?那么,增量式爬虫就可以帮助我们来实现

    二 增量式爬虫
    概念

    通过爬虫程序检测某网站数据更新的情况,这样就能爬取到该网站更新出来的数据

    如何进行增量式爬取工作:
    • 在发送请求之前判断这个URL之前是不是爬取过
    • 在解析内容之后判断该内容之前是否爬取过
    • 在写入存储介质时判断内容是不是在该介质中
    增量式的核心是 去重
    去重的方法
    • 将爬取过程中产生的URL进行存储,存入到redis中的set中,当下次再爬取的时候,对在存储的URL中的set中进行判断,如果URL存在则不发起请求,否则 就发起请求
    • 对爬取到的网站内容进行唯一的标识,然后将该唯一标识存储到redis的set中,当下次再爬取数据的时候,在进行持久化存储之前,要判断该数据的唯一标识在不在redis中的set中,如果在,则不在进行存储,否则就存储该内容

    进行增量爬虫,需要使用scrapy-redis模块,一些基本的安装可以搜索一下,我们说一下部署和运行时遇到的问题(仅作为个人记录查看使用)

    1、在setting中设置redis

    #去重组件,在redis数据库里做去重操作
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    #
    # #使用scrapy_redis的调度器,在redis里分配请求
    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    #
    # # 是否在开始之前清空 调度器和去重记录,True=清空,False=不清空
    SCHEDULER_FLUSH_ON_START = True
    #
    # # 去调度器中获取数据时,如果为空,最多等待时间(最后没数据,未获取到)。
    SCHEDULER_IDLE_BEFORE_CLOSE = 10
    #
    # # 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空
    SCHEDULER_PERSIST = True
    #
    # #服务器地址
    REDIS_HOST = '127.0.0.1'
    #
    # #端口
    REDIS_PORT = 6379
    
    

      此段代码可复用,每句也都标有注释

    2、对自己编写的爬虫进行更改

    下图是判断是否有新数据

     3、pipeline 正常设置存入MySQL、mongodb

    import pymysql
    class HuVPipeline(object):
        def process_item(self, item, spider):
            print('mysql--')
            #连接数据库,
            conn = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='mysql')
            #获取游标
            cusor = conn.cursor()
            #获取数据
            title=item['title']
            username=item['username']
            yijuhua=item['yijuhua']
            otherStyleTime=item['otherStyleTime']
            #sql语句
            sql = """INSERT INTO hux VALUES (%s, %s, %s, %s)"""
            #这里是元组数据,(str,str,str,str)
            cusor.execute(sql, (title, username, yijuhua, otherStyleTime))
            cusor.close()
            conn.commit()
            # 关闭数据库连接
            conn.close()
            return item
    

     连接redis数据库:

    cmd打开命令窗口-进入redis目录-输入redis-server.exe开启服务端

    不关闭刚才打开的命令窗口,再打开一个命令窗口,进入redis目录,输入redis-cli.exe -h 127.0.0.1 -p 6379   主机ip和端口号-然后输入lpush key value

     mac 链接redis

    打开终端,启动redis

    cd /usr/local/bin
    
    ./redis-servers

    使用lpush

    cd /usr/local/bin
    
    ./redis-cli -h 127.0.0.1 -p 6379
    
    #lpush key value
    
    lpush hu_v2:start_urls http://www.***.com
    

      

    最后scrapy crawl (name)运行程序

  • 相关阅读:
    JVM发生OOM调优
    行云创新完成B轮融资,阿里云独家投资
    行云创新直播回顾:DDD“爱”上Dapr
    如何通过Dapr快速实现DDD?
    通过Dapr快速落地DDD,实现高并发
    上K8s,研发团队如何从容一点?
    直播来了!等你围观!聊聊服务网格那些事儿
    服务网格出现流量故障该咋办?SolarMesh发布重大功能
    mysql 授权问题
    Centos Mysql5.7 安装
  • 原文地址:https://www.cnblogs.com/zxg-1997/p/13869781.html
Copyright © 2020-2023  润新知