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创建线程示例
May 06 Python
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python可变参数函数用法实例
Jul 07 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
Python中logging实例讲解
Jan 17 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
200行python代码实现2048游戏
Jul 17 Python
python编写猜数字小游戏
Oct 06 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
Python 正则模块详情
Nov 02 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 setTime 设置当前时间的代码
2012/08/27 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
2019/06/09 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
使用vant的地域控件追加全部选项
2020/11/03 Javascript
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
python实现简单井字棋小游戏
2020/03/05 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
积极分子思想汇报
2014/01/04 职场文书
市场安全管理制度
2014/01/26 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
就业意向书范文
2014/04/01 职场文书
单身申明具结书
2015/02/26 职场文书
加入学生会自荐书
2015/03/05 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书