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的id()函数解密过程
Dec 25 Python
Python中的heapq模块源码详析
Jan 08 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
详解Python3中ceil()函数用法
Feb 19 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
Djang的model创建的字段和参数详解
Jul 27 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
PHP统计代码行数的小代码
Sep 19 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
Python爬虫实现selenium处理iframe作用域问题
Jan 27 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
Bootstrap CSS布局之图像
2016/12/17 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
js里面的变量范围分享
2020/07/18 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
python解析xml文件实例分享
2013/12/04 Python
Python用threading实现多线程详解
2017/02/03 Python
python实现泊松图像融合
2018/07/26 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
python实现双色球随机选号
2020/01/01 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
地球一小时倡议书
2014/04/15 职场文书
人力资源职位说明书
2014/07/29 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
十岁生日答谢词
2015/01/05 职场文书
寒山寺导游词
2015/02/03 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis