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
Aug 29 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
Python用list或dict字段模式读取文件的方法
Jan 10 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
详解python中list的使用
Mar 15 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
Apr 02 Python
python小白切忌乱用表达式
May 29 Python
Python实现快速大文件比较代码解析
Sep 04 Python
python中使用np.delete()的实例方法
Feb 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
echo(),print(),print_r()之间的区别?
2006/11/19 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
javascript 写类方式之二
2009/07/05 Javascript
页面使用密码保护代码
2013/04/10 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python人人网登录应用实例
2014/09/26 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
详解python:time模块用法
2019/03/25 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
大专毕业生简历的自我评价
2013/10/20 职场文书
2014社区三八妇女节活动总结
2014/03/01 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
大学生入党自荐书
2015/03/05 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
考试后的感想
2015/08/07 职场文书
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
mysql 体系结构和存储引擎介绍
2022/05/06 MySQL