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 tempfile模块学习笔记(临时文件)
May 25 Python
全面分析Python的优点和缺点
Feb 07 Python
python opencv之分水岭算法示例
Feb 24 Python
Python实现的直接插入排序算法示例
Apr 29 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
Python中最大递归深度值的探讨
Mar 05 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python 实现微信自动回复的方法
Sep 11 Python
Python Sqlalchemy如何实现select for update
Oct 12 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
PHP 多进程 解决难题
2009/06/22 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
php自定义apk安装包实例
2014/10/20 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
2015/05/12 PHP
PHP常用的小程序代码段
2015/11/14 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
Javascript学习笔记4 Eval函数
2010/01/11 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
vue多次循环操作示例
2019/02/08 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python 文件操作删除某行的实例
2017/09/04 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
Adobe Html5 Extension开发初体验图文教程
2017/11/14 HTML / CSS
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
工程质量承诺书
2014/03/27 职场文书
探亲假请假条
2014/04/11 职场文书
小学生作文评语
2014/04/18 职场文书
个人作风建设心得体会
2014/10/22 职场文书
离职信范本
2015/06/23 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python