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)运行程序

 

posted @ 2020-10-24 15:59  北里渡  阅读(110)  评论(0编辑  收藏  举报