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过滤列表用法实例分析
Apr 29 Python
Python单例模式的两种实现方法
Aug 14 Python
Python入门之后再看点什么好?
Mar 05 Python
Python简单实现两个任意字符串乘积的方法示例
Apr 12 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
jquery插件之easing使用
2010/08/19 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
python代码制作configure文件示例
2014/07/28 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python3基于TCP实现CS架构文件传输
2018/07/28 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Python-for循环的内部机制
2020/06/12 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
房地产管理毕业生自荐信
2013/11/04 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
2014业务员年终工作总结
2014/12/09 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
军事理论课感想
2015/08/11 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang