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程序实例(通讯录)
Nov 29 Python
为Python的web框架编写MVC配置来使其运行的教程
Apr 30 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
用python与文件进行交互的方法
Mar 01 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
解决Mac下使用python的坑
Aug 13 Python
OpenCV哈里斯(Harris)角点检测的实现
Jan 15 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
Oct 15 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
纯javascript实现四方向文本无缝滚动效果
2015/06/16 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
使用python调用浏览器并打开一个网址的例子
2014/06/05 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python引用类型和值类型的区别与使用解析
2017/10/17 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python中常用的高阶函数实例详解
2020/02/21 Python
python 画图 图例自由定义方式
2020/04/17 Python
python 监控logcat关键字功能
2020/09/04 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
室内设计专业毕业生求职信
2014/05/02 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
小学假期安全广播稿
2014/09/28 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python