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)和列表(list)的排序方法实例
Jun 16 Python
Python如何为图片添加水印
Nov 25 Python
Python基础之getpass模块详细介绍
Aug 10 Python
机器学习python实战之手写数字识别
Nov 01 Python
django定期执行任务(实例讲解)
Nov 03 Python
Python+matplotlib实现填充螺旋实例
Jan 15 Python
Pycharm 操作Django Model的简单运用方法
May 23 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python提取照片坐标信息的实例代码
Aug 14 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
解决python中import文件夹下面py文件报错问题
Jun 01 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
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
2017/03/17 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
python suds访问webservice服务实现
2020/06/26 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
中学生团员自我评价分享
2013/12/07 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
停车场管理协议书范本
2014/10/08 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
新郎新娘致辞
2015/07/31 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫