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实现通过pil模块对图片格式进行转换的方法
Mar 24 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
python实现逻辑回归的方法示例
May 02 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
django实现类似触发器的功能
Nov 15 Python
python爬虫之遍历单个域名
Nov 20 Python
Python 装饰器原理、定义与用法详解
Dec 07 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
python能自学吗
Jun 18 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 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
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php用正则表达式匹配中文实例详解
2013/11/06 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
php把数组值转换成键的方法
2015/07/13 PHP
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
对Django中内置的User模型实例详解
2019/08/16 Python
Python hmac模块使用实例解析
2019/12/24 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python os.listdir()乱码解决方案
2021/01/31 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
酒店管理毕业生自荐信
2013/10/24 职场文书
房屋出租协议书
2014/04/10 职场文书
初中教师业务学习材料
2014/05/12 职场文书
司法局火灾防控方案
2014/06/05 职场文书
学校节能减排方案
2014/06/13 职场文书
行政求职信
2014/07/04 职场文书
合伙经营协议书范本
2014/09/13 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏