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实现优先级队列结构的方法详解
Jun 02 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
python实现傅里叶级数展开的实现
Jul 21 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
详解python算法常用技巧与内置库
Oct 17 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 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 魔术方法使用说明
2009/10/20 PHP
php自动获取目录下的模板的代码
2010/08/08 PHP
百度地图API使用方法详解
2015/08/25 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
js中的关联数组与普通数组详解
2016/07/27 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
js面向对象编程总结
2017/02/16 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
Python实现将n个点均匀地分布在球面上的方法
2015/03/12 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
python实现超市商品销售管理系统
2019/10/25 Python
python实现手势识别的示例(入门)
2020/04/15 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
幼儿如何来做好自我评价
2013/11/05 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
公司开业庆典主持词
2014/03/21 职场文书
我的小天地教学反思
2014/04/30 职场文书
实习科室评语
2015/01/04 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
修辞手法有哪些?
2019/08/29 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
python通过函数名调用函数的几种方法总结
2021/06/07 Python
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers