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的bottle框架跨域请求报错问题的处理方法
Mar 19 Python
Python实现选择排序
Jun 04 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
Python实现的redis分布式锁功能示例
May 29 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 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强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
PHP培训要多少钱
2017/06/06 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
基于jQuery图片平滑连续滚动插件
2009/04/27 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
jQuery的控件及事件(输入控件及回车事件)使用示例
2013/07/25 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python类属性的延迟计算
2016/10/22 Python
caffe binaryproto 与 npy相互转换的实例讲解
2018/07/09 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
院药学专业个人求职信
2013/09/21 职场文书
商场经理竞聘演讲稿
2014/01/01 职场文书
个人求职信范文分享
2014/01/06 职场文书
文案策划求职信
2014/04/14 职场文书
安全环保标语
2014/06/09 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
心得体会的写法
2014/09/05 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
mysql sock 文件解析及作用讲解
2022/07/15 MySQL