python爬虫scrapy框架之增量式爬虫的示例代码


Posted in Python onFebruary 26, 2021

scrapy框架之增量式爬虫

一 、增量式爬虫

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

二 、增量式爬虫

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

如何进行增量式爬取工作:
在发送请求之前判断这个URL之前是不是爬取过
在解析内容之后判断该内容之前是否爬取过
在写入存储介质时判断内容是不是在该介质中

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

三、示例

爬虫文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redis import Redis
from increment2_Pro.items import Increment2ProItem
import hashlib
class QiubaiSpider(CrawlSpider):
  name = 'qiubai'
  # allowed_domains = ['www.xxx.com']
  start_urls = ['https://www.qiushibaike.com/text/']

  rules = (
    Rule(LinkExtractor(allow=r'/text/page/\d+/'), callback='parse_item', follow=True),
  )

  def parse_item(self, response):

    div_list = response.xpath('//div[@class="article block untagged mb15 typs_hot"]')
    conn = Redis(host='127.0.0.1',port=6379)
    for div in div_list:
      item = Increment2ProItem()
      item['content'] = div.xpath('.//div[@class="content"]/span//text()').extract()
      item['content'] = ''.join(item['content'])
      item['author'] = div.xpath('./div/a[2]/h2/text() | ./div[1]/span[2]/h2/text()').extract_first()
      
			# 将当前爬取的数据做哈希唯一标识(数据指纹)
      sourse = item['content']+item['author']
      hashvalue = hashlib.sha256(sourse.encode()).hexdigest()

      ex = conn.sadd('qiubai_hash',hashvalue)
      if ex == 1:
        yield item
      else:
        print('没有可更新的数据可爬取')


    # item = {}
    #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
    #item['name'] = response.xpath('//div[@id="name"]').get()
    #item['description'] = response.xpath('//div[@id="description"]').get()
    # return item

管道文件(管道文件也可以不用加)

from redis import Redis
class Increment2ProPipeline(object):
  conn = None
  def open_spider(self,spider):
    self.conn = Redis(host='127.0.0.1',port=6379)
  def process_item(self, item, spider):
    dic = {
      'author':item['author'],
      'content':item['content']
    }
    self.conn.lpush('qiubaiData',dic)
    print('爬取到一条数据,正在入库......')
    return item

到此这篇关于python爬虫之scrapy框架之增量式爬虫的示例代码的文章就介绍到这了,更多相关scrapy增量式爬虫内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
深入理解Python装饰器
Jul 27 Python
利用Python如何生成hash值示例详解
Dec 20 Python
详谈python在windows中的文件路径问题
Apr 28 Python
Python BS4库的安装与使用详解
Aug 08 Python
python操作excel的方法
Aug 16 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
python安装numpy和pandas的方法步骤
May 27 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
python3中sys.argv的实例用法
Apr 24 Python
Python改变对象的字符串显示的方法
Aug 01 Python
scrapy处理python爬虫调度详解
Nov 23 Python
详解Python openpyxl库的基本应用
Feb 26 #Python
解决python的空格和tab混淆而报错的问题
Feb 26 #Python
Python Spyder 调出缩进对齐线的操作
Feb 26 #Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 #Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 #Python
Python xlwings插入Excel图片的实现方法
Feb 26 #Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 #Python
You might like
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
2018/08/06 PHP
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
浅析js中的浮点型运算问题
2014/01/06 Javascript
jquery 为a标签绑定click事件示例代码
2014/06/23 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
Python中如何引入第三方模块
2020/05/27 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
2014初中数学教研组工作总结
2014/12/19 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
幼儿园六一主持词
2015/06/30 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
浅析MongoDB之安全认证
2021/06/26 MongoDB
Python可视化学习之seaborn调色盘
2022/02/24 Python
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers