Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥

2023-11-13

概念

检测网络数据更新的情况,以便于爬取到最新更新出来的数据

实现核心

去重

实战中去重的方式

记录表

记录表需要记录什么?记录的一定是爬取过的相关信息。

例如某电影网:

  • 爬取过的相关信息:每一部电影详情页的url
  • 只需要使用某一组数据,该组数据如果可以作为该部电影的唯一标识即可,刚好电影详情页的url就可以作为电影的唯一标识。

只要可以标识电影唯一标识的数据我们可以统称位数据指纹

去重的方式对应的记录表

  • python中的set集合(不可以)

    set集合无法持久化存储

  • redis中的set可以的

    可以持久化存储


代码案例

zls.py

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redis import Redis
from zlsPro.items import ZlsproItem


class ZlsSpider(CrawlSpider):
    name = 'zls'
    # allowed_domains = ['www.xxx.com']
    start_urls = ['http://www.4567kp.com/frim/index1.html']
    coon = Redis(host='127.0.0.1', port=6379)
    rules = (
        Rule(LinkExtractor(allow=r'frim/index1-\d+\.html'), callback='parse_item', follow=False),
    )

    def parse_item(self, response):
        li_list = response.xpath('/html/body/div[1]/div/div/div/div[2]/ul/li')
        for li in li_list:
            title = li.xpath('./div/div/h4/a/text()').extract_first()
            detail_url = 'http://www.4567kp.com' + li.xpath('./div/div/h4/a/@href').extract_first()

            ex = self.coon.sadd('movie_urls', detail_url)
            # ex==1插入成功,ex==0插入失败
            if ex == 1:  # detail_url表示的电影没有存在于记录表中
                # 爬取电影数据:发起请求
                print('有新数据更新,正在爬取新数据....')
                item = ZlsproItem()
                item['title'] = title
                yield scrapy.Request(url=detail_url, callback=self.parse_detail, meta={'item': item})
            else:  # 存在于记录表中
                print('暂无数据更新!')

    def parse_detail(self, response):
        # 解析电影简介
        desc = response.xpath('/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()').extract_first()
        item = response.meta['item']
        item['desc'] = desc

        yield item

pipeline.py

class ZlsproPipeline:
    def process_item(self, item, spider):
        coon=spider.coon #redis的连接对象
        coon.lpush('movieDate',item)
        return item

items.py

import scrapy

class ZlsproItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    desc = scrapy.Field()

数据指纹一般是经过加密的

上述案例的数据指纹没有必要加密。

什么情况数据指纹需要加密?

  • 如果数据的唯一标识标识的内容数据量比较大,可以使用hash将数据加密成32位密文。
  • 目的是为了节省空间。

关注Python涛哥!学习更多Python知识!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥 的相关文章

随机推荐

  • 【0325】分组密码

    分组密码 体制概述 分组密码体制 Block cipher 是在密钥k控制下一次变换一个明文数据块 又称分组 的密码体制 特点 速度快 易于标准化和便于软硬件实现等特点 设计原则和评估 针对安全性的两个基本原则 扩散和混淆 对抗统计分析 扩
  • Solidity学习代码示例 - 第一节

    掌握了Solidity的基本语法后 我们开始从一些简单的代码层面上来慢慢深入学习Solidity这门语言 在这篇文章中 我将会在代码层面带着大家去实现我们想要的逻辑 带着大家一起感受Solidity这门语言 我们所有的代码编译部署都是在智能
  • elementUI实现上传视频时获取视频时长以及设置视频格式、大小限制

    在 before upload 属性绑定的事件中可以获取上传视频的信息对象 通过给这个信息对象内的属性添加判断条件就可以实现对视频的格式及大小进行限制 对于视频时长 也包含在信息对象中 根据下面代码所示方法提取即可 想了解如何给上传图片添加
  • 刷脸支付只需一个确认的眼神就可以付款

    让我们来设想一下这样的场景 你早上匆匆忙忙赶着出门买东西却忘记带手机 没关系 带脸就OK 腾出两只手拎更多的战利品 在结账时候刚好客户打来电话 挂掉又不礼貌 没关系 刷脸支付只需要一个确认的眼神 还有很多方面 刷脸支付将像当年的支付宝一样
  • spring mongodb geo 位置搜索服务 示例

    1 项目关联jar文件 2 配置mongodb xml文件
  • 不知道麦克风阵列是何方神圣?这篇文章告诉你!

    转自 http www ikanchai com 2016 0522 80416 shtml 城宇智能硬件 发布 砍柴网推荐 转载需注明 上个世纪七八十年代 麦克风阵列技术已经开始应用到语音技术的研究中 2000年左右 业界开始慢慢深入 进
  • Java面试复习提纲

    Java面试复习提纲 作者 egg 邮箱 xtfggef gmail com 微博 http weibo com xtfggef 博客 http blog csdn net zhangerqing 本章主要介绍一下面对即将来临的Java面试
  • apache24服务启动

    声明 本文 禁止转载 本文所有观点和概念都系个人总结 难免存在疏漏之处 为不至于诱导初学者误入歧途 望各位以自己实践为准 特此声明 如有错误请告知 服务 链接 https pan baidu com s 1VS xSo3eC7TxihciN
  • 仅四步教你快速接入Seata分布式事务

    简介 Seata 是一款开源的分布式事务解决方案 致力于提供高性能和简单易用的分布式事务服务 Seata 将为用户提供了 AT TCC SAGA 和 XA 事务模式 为用户打造一站式的分布式解决方案 本篇文章将以视频与文字介绍的形式 指引你
  • Qt+SDL播放YUV视频文件

    播放一个yuv420p格式的文件 yuv的格式与rgb格式的存储方式不同 yuv数据是 yyyyyyyy uu vv 的存储 rgb是rgba rgba rgba 存储 同样一帧图像 yuv420会比rgb数据更小 读取时就要注意数据存储格
  • 关于文件读写操作中ios::app与ios::ate的区别

    前几天在用到对文件操作的时候上网查询了一下 当时只看到说在文件末尾继续写是用ios ate 结果当然是屡试爽了 后来又仔细看了一下文章 才发现ios app 用这个果然就可以了 Google了一下两者的区别 出现了一个表格 还是说的很详细吧
  • 数据分析36计(17):Uber的 A/B 实验平台搭建

    往期系列原创文章集锦 数据分析36计 16 和 A B 测试同等重要的观察性研究 群组研究 VS 病例 对照方法 数据分析36计 15 这个序贯检验方法让 A B 实验节约一半样本量 数据分析36计 14 A B测试中的10个陷阱 一不注意
  • C语言基础(底层、运算符)

    一 C语言底层 程序 算法 数据 1 整型 字符类型 字符常量 a 一个字符 字符串常量 abcd 多个字符 字符变量 1 定义字符 有无符号 类型 变量 2 引用变量 引用变量的内容 2 浮点型 1 浮点型常量 十进制 3 14 科学表示
  • Aix上的压缩与解压

    1 compress生成一个后缀为 Z的压缩文件 可用compress d或者uncompress解压后缀为 Z的文件 若压缩的文件是文本文件 可用zcat直接查看压缩文件 不需要先解压 再用cat 2 gzip生成一个后缀为 gz的压缩文
  • python backtrace注意事项

    1 当python异常时 web服务器一般会记录异常日志 比如uwsgi 如果用python自带的web server 那么启动时要把输出重定向一下 2 有时要把异常backtrace与普通日志记录在一起 可以在logging xxx 函数
  • js浮点数计算精度问题

    js语言在进行数字计算时会发生计算精度失真的情况 因为javascript使用了IEEE 745浮点数表示法 在运算是会将浮点数转换为二进制数字计算 例如 0 1 gt 0 0001100110011001 无限 0 2 gt 0 0011
  • 【干货】今日头条的新闻推荐算法原理

    信息越来越海量 用户获取信息越来越茫然 而推荐算法则能有助于更好的匹配海量内容和用户需求 使之更加的 有的放矢 为让产业各方更好的了解算法分发的相关技术和原理 我们特整理了当下最具影响力的平台的相关干货 和各方分享 本期微信 我们将推荐影视
  • pip安装pytorch 清华镜像

    每次要搭配环境的时候就头大 资源基本是国外 下载起来特别慢 有些连服务器都访问不了 不用镜像 按照书上或者网上的正常流程搭配环境 基本上都是以超时告终 然后就在网上疯狂找资源 网上有人说是个程序员都会翻墙 我可能是个假的程序员吧 什么都不会
  • Arthas watch命令使用

    目录 属性遍历深度 1 watch 类全限定名 方法名 遍历深度为1的入参 对象 返回信息 2 watch 类全限定名 方法名 x n 观察遍历深度为n的入参 对象 返回信息 观察事件点 1 watch 类全限定名 方法名 params x
  • Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥

    概念 检测网络数据更新的情况 以便于爬取到最新更新出来的数据 实现核心 去重 实战中去重的方式 记录表 记录表需要记录什么 记录的一定是爬取过的相关信息 例如某电影网 爬取过的相关信息 每一部电影详情页的url 只需要使用某一组数据 该组数