爬虫工作量由小到大的思维转变---<第六十三章 Scrapy统计收集器类的分析与应用(2)>

前言:

继续上一章:https://hsnd-91.blog.csdn.net/article/details/137116692

本章继续深入:

  1. StatsCollector类是Scrapy中负责收集和处理爬虫统计数据的核心组件,可以用于监控爬虫、性能调优、错误处理和报告生成等场景。
  2. MemoryStatsCollector类相较于StatsCollector类具有更强的功能扩展性和细粒度的数据操作能力,适用于需要紧密监控和分析爬虫表现的情况。
  3. DummyStatsCollector类则是一个轻量级组件,主要用于测试或不关心统计数据的环境中,可以减少资源消耗、提高运行效率和简化调试。

正文:

1. StatsCollector类分析与应用

1.1 StatsCollector类解析

StatsCollector类是Scrapy中负责收集和处理爬虫统计数据的核心组件。一切关于爬虫的运行时间、请求数量、响应状态等关键数据,都可以通过这个类进行采集、储存和检索。

1.2 构造函数与参数

StatsCollector的构造函数初始化了一个用于收集统计数据的对象。在Scrapy框架中,每当Spider开始运行时,StatsCollector就会被实例化,用以追踪爬虫的活动和性能指标。

构造函数的参数通常包括:

  • crawler:这是对Crawler对象的引用,其中包含了Scrapy运行爬虫所需的所有设置和状态信息。

构造函数的例子如下:

from scrapy.statscollectors import StatsCollector

class MySpider(scrapy.Spider):
    # Spider定义...

crawler = get_crawler()
stats_collector = StatsCollector(crawler)

1.3 主要方法解析

1.3.1 get_value

get_value方法用于获取指定统计数据的值。参数包括一个键(key),代表想要查询的统计数据名,以及一个默认值(default),用于在没有相应统计数据时返回。

1.3.2 set_value

set_value方法直接设定统计数据的值。它接受两个参数:一个键(key),代表要设置的统计数据名,以及一个值(value),是要设置的具体数值。

1.3.3 inc_value

inc_value方法用于增加统计数据的值。如果数据不存在,则从默认值开始累加;否则,在现有的值上进行累加。键(key)、增量(count)和默认值(start)是这个方法的参数。

1.3.4 dec_value

inc_value相反,dec_value方法用于减少统计数据的值。

1.3.5 max_value

max_value用于更新统计数据的最大值。如果当前统计数据的值比提供的值小,就会更新它。

1.3.6 min_value

min_value则用于更新统计数据的最小值。如果当前统计数据的值比提供的值大,就会更新它。

1.3.7 clear_stats

clear_stats可以清除所有统计数据。

1.4 应用场景分析

Scrapy的StatsCollector类提供了很多方法和工具,这些工具在爬虫开发过程的不同阶段都有实际的应用价值。接下来,通过一系列的实际场景,我们详细介绍如何利用StatsCollector类。

1.4.1 场景一:监控爬虫

在爬虫运行期间,监控其性能指标至关重要。利用StatsCollectorget_value方法,可以实时获取最新的请求计数、错误数等关键统计信息,有效监控爬虫运行状态。

1.4.2 场景二:性能调优

通过记录和分析响应时间、请求失败比例等数据,我们能够识别那些影响爬虫性能的环节。例如,利用max_valuemin_value方法可以追踪响应时间的极值,辅助我们进行性能调优。

1.4.3 场景三:错误处理

在爬虫发生错误时,准确记录错误信息至关重要。使用inc_value方法,可以建立一个自定义的错误计数器,并在爬虫出错时进行更新。

1.4.4场景四:报告生成

爬虫结束之后,利用StatsCollector收集到的数据生成报告,为程序员和利益相关者提供信息支持。可以利用get_stats方法获取全部统计数据并导出。

1.5 使用示例

让我们通过几个具体的例子来更好地理解StatsCollector类的使用。

1.5.1 示例一:跟踪请求数量

在Spider代码中,我们如下使用inc_value方法来跟踪请求的总数量:

class MySpider(scrapy.Spider):
    name = 'myspider'
    
    def parse(self, response):
        # 伪代码解析页面
        self.crawler.stats.inc_value('request_count')
        yield 数据或请求

每当一个新的请求生成时,请求计数就会增加。

1.5.2 示例二:记录和比较响应时间

一个典型的爬虫通常需要掌握响应时间的信息,以判断网页响应是否过慢。示例代码如下:

import time

class MySpider(scrapy.Spider):
    name = 'myspider'
    
    def parse(self, response):
        start_time = time.time()
        # 解析页面...
        end_time = time.time()
        response_time = end_time - start_time
        self.crawler.stats.max_value('max_response_time', response_time)

在这里,我们记录了每个响应的处理时间,并使用max_value来跟踪最长的响应时间。

1.5.3 示例三:错误计数
class MySpider(scrapy.Spider):
    name = 'myspider'
    
    def parse(self, response):
        try:
            # 尝试解析页面可能会抛出异常
        except Exception as e:
            self.crawler.stats.inc_value('error_count')
            self.logger.error(f'解析错误: {e}')

当解析函数遇到异常时,错误计数器增加,并且日志中打印相应的错误信息。


2 MemoryStatsCollector类分析与应用

2.1 MemoryStatsCollector类分析与应用

在网络数据爬取的实践中,追踪爬虫的性能并实时获取操作反馈是至关重要的任务。Scrapy框架中的MemoryStatsCollector类,作为StatsCollector的子类,其设计目标是为开发人员提供对爬虫执行状态的更详尽的内存中统计信息。本章节我们将对MemoryStatsCollector类的构造、功能、以及应用场景进行详细探讨。

2.2 MemoryStatsCollector类概览

MemoryStatsCollector类继承自StatsCollector类,并在此基础上添加了新的特性和功能,以支持更丰富的性能监测和信息可视化需求。这个类的主要目的是在Scrapy爬虫的内存中维护详细的统计数据,使得开发人员能够对爬虫实例运行过程中的各类指标进行实时监控。

2.3 MemoryStatsCollector目的与特点

MemoryStatsCollector类的主要目的在于提供更精确的监控功能,允许开发者深入分析和理解爬虫的行为。它的重点特性包括但不限于:

  • 持久化统计: 爬虫结束时,所有收集的内存统计数据都可以被持久化,如保存到数据库中,为爬虫的长期性能分析和历史比较提供了可能。
  • 实时性能监控: 内存中保留统计数据使得开发者可以在爬虫运行过程中,实时把握爬虫的表现,快速识别和响应潜在问题。

2.4 MemoryStatsCollector属性与方法分析

2.4.1 新增属性
spider_stats

spider_stats属性是一个字典(dict类型),它记录了与单个爬虫实例相关的所有统计信息。该属性的目的是使得每个Spider实例都有一个单独的统计空间,帮助开发者区分和对比不同爬虫间的性能。

2.4.2 新增方法
_persist_stats

_persist_stats方法负责将内存中的统计信息保存到外部系统中。这意味着数据不仅仅在爬虫运行时可用,结束后也可以持久保留,这为进行长期的数据分析提供了基础。

2.5 MemoryStatsCollector的优势与应用场景

相比于基本的StatsCollector,MemoryStatsCollector类有一系列明显的优势,特别在需要紧密监控和分析爬虫表现的情况下更加突出。其优势不只体现在功能扩展性上,还体现在为工程师提供细粒度的数据操作能力上。

2.5.1 优势分析
  1. 更丰富的数据: MemoryStatsCollector的统计数据更为详尽,它能够追踪更多维度的性能指标和事件,从而为开发者提供用于决策的更多信息。

  2. 易于扩展: 它对开发者友好的接口和设计模式,使得其更容易被扩展和集成到其他系统中,提供了良好的灵活性。

  3. 强化数据持久化: MemoryStatsCollector能够将运行时数据持久化,这意味着爬虫的运行信息可以被长时间地存储和分析,为微观分析和宏观策略的制定提供了支持。

2.5.2 应用场景
  1. 大规模爬取任务: 对于需要处理大量请求和数据的爬虫,MemoryStatsCollector能够记录足够的运行数据,帮助分析和优化处理流程。

  2. 优化性能: 当爬虫性能达到瓶颈时,MemoryStatsCollector提供的详尽数据支持开发者进行深层次的性能瓶颈分析。

  3. 监控与预警系统: 通过实时监测爬虫的表现,MemoryStatsCollector可以与监控系统集成,为运维人员提供实时的预警。

  4. 长期数据分析: 爬虫有时需要进行长期运行并在过去的数据上进行比较分析,MemoryStatsCollector的持久化特性就非常有用。

2.6 使用示例

上述特性在日常使用中如何体现呢?以下是一些实际应用代码示例。

2.6.1 示例一:统计项持久化
# 假设我们的Spider结束运行时,需要存储统计信息到数据库中:
class MySpider(scrapy.Spider):
    name = 'myspider'

    def close(self, reason):
        # 将内存中的统计数据持久化
        self.crawler.stats._persist_stats(self.stats, self.crawler.settings)
        
        # 其余关闭逻辑...

在这里,我们在爬虫关闭时调用_persist_stats方法,它会把spider_stats中的数据持久化,从而在数据库中储存当前爬虫实例运行的所有统计信息。

2.6.2 示例二:实时性能监控
# 如果我们需要实时监控爬虫的表现并记录响应时间等数据:
class MySpider(scrapy.Spider):
    name = 'myspider'

    def parse(self, response):
        # 记录响应到达时间
        self.crawler.stats.inc_value('response_arrived_count')
        
        # 继续处理response...

在此场景中parse方法每被调用一次,相应的统计项response_arrived_count就会增加,这样我们就可以实时追踪并且分析响应时间了。


3 DummyStatsCollector类分析与应用

3.1 DummyStatsCollector类概览

DummyStatsCollector类是在Scrapy中用作收集统计数据的轻量级组件。它实现了与StatsCollector相同的接口,但并不执行任何实质性的操作。这意味着无论何时调用它的方法,DummyStatsCollector都只会简单地执行而不保留任何数据。

3.2 DummyStatsCollector的作用与用途

DummyStatsCollector的主要作用是在测试或者不关心统计数据的环境中使用。它能够

  • 减少资源消耗:DummyStatsCollector没有数据存储的需要,因而节省了存储资源。
  • 提高运行效率:不记录统计信息,可以避免I/O操作,从而网速执行。
  • 简化调试:在开发过程中,可以使用DummyStatsCollector来简化代码的流程,不必关心统计数据的准确性,使关注点保持在更核心的爬虫功能上。

3.3 DummyStatsCollector重写的方法分析

虽然DummyStatsCollector类提供了与StatsCollector一致的方法,但它们都被重写成了无状态的操作。以下是一些核心方法的重写示例:

3.3.1 get_value

get_value方法用于获取指定的统计数据,但在DummyStatsCollector中调用此方法总是返回默认值或None

3.3.2 set_value

set_value方法在DummyStatsCollector中同样只是一个空操作,设置任何值都不会有实际效果,因为它并不保留数据。

3.3.3 inc_value / dec_value

inc_valuedec_value方法在DummyStatsCollector中被重写为无操作状态。它们被调用时不会有任何统计数据的增减,无论传入何种参数。

3.4 DummyStatsCollector的应用场景及使用示例

DummyStatsCollector的应用场景通常局限于开发和测试阶段,或者在资源非常受限的环境中,当统计数据不是必需的。

3.4.1 场景一:自动化测试

在进行自动化测试时,通常更关心程序的逻辑正确性而非性能指标。在这种情况下,可以使用DummyStatsCollector来替换默认的统计收集器。

from scrapy.statscollectors import DummyStatsCollector

class MySpider(scrapy.Spider):
    name = 'myspider'

    # 爬虫的其它定义...

# 在爬虫设置中使用DummyStatsCollector
crawler = get_crawler()
crawler.stats = DummyStatsCollector(crawler)
3.4.2 场景二:开发阶段的性能测试

在开发阶段对爬虫进行性能优化时,可能暂时需要禁用统计功能,以便更精准地分析代码本身的性能特点。

from scrapy.statscollectors import DummyStatsCollector

class MySpider(scrapy.Spider):
    name = 'myspider'

    def parse(self, response):
        # 此处逻辑不受统计模块影响,专注于性能调优
        # ...
        pass

# 实例化DummyStatsCollector用于开发阶段
crawler.stats = DummyStatsCollector()

结语:

        本文介绍了Scrapy框架中的StatsCollector类及其子类MemoryStatsCollector和DummyStatsCollector的功能和用途。

  1. StatsCollector类是爬虫统计数据的核心组件,用于收集和处理关键统计信息;
  2. MemoryStatsCollector在需要紧密监控和分析爬虫性能时具有明显的优势;
  3. DummyStatsCollector则用于测试环境或不关心统计数据的场景;

通过对各类的方法解析和应用场景分析,我们可以更好地理解如何使用StatsCollector类及其子类来监控爬虫、进行性能调优和错误处理,并生成报告。这些类提供了强大的工具,为爬虫开发者提供了统计数据的收集和分析的能力,帮助优化爬虫的表现和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/498129.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业网站建设的方法的相关问题的解决办法的问题

现在市场上比较大的公司都建立了自己的企业网站,比如华为、小米等,在他们的企业网站中,可以充分展示自己产品的优势,介绍公司的优质服务。 这都是让顾客改变购买想法的重要因素。 现在互联网发达了,很多人在购买产品的…

详细分析axios.js:72 Uncaught (in promise) Error: 未知错误 的解决方法(图文)

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 调试接口的时候,打开一个网页,在终端出现如下错误: axios.js:72 Uncaught (in promise) Error: 未知错误at __webpack_exports__.default (axios.js:72:1)截图如下所示: 2. 原理分析 点击浏览器的Bug出错: // 如果…

C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)

初级:用好手上的锤子 1 【感性】认识 C 系编程语言开发调试过程 1.1 视频教程点到为止 1.2 炫技视频看看就行 1.3 编程游戏不玩也罢 有些游戏的主题任务就是编程,游戏和实际应用环境有一定差异(工具、操作流程),在…

进程知识点

引用的文章:操作系统——进程通信(IPC)_系统ipc-CSDN博客 面试汇总(五):操作系统常见面试总结(一):进程与线程的相关知识点 - 知乎 (zhihu.com) 二、进程的定义、组成、组成方式及特征_进程的组成部分必须包含-CSDN博…

2024年北京事业单位报名照片要求,注意格式

2024年北京事业单位报名照片要求,注意格式

【C语言】预处理常见知识详解(宏详解)

文章目录 1、预定义符号2、define2.1 define 定义常量2.2 define 定义宏 3、#和##3.1 **#**3.2 **##** 4、条件编译(开关) 1、预定义符号 在C语言中内置了一些预定义符号,可以直接使用,这些符号实在预处理期间处理的,…

工控安全双评合规:等保测评与商用密码共铸新篇章

01.双评合规概述 2017年《中华人民共和国网络安全法》开始正式施行,网络安全等级测评工作也在全国范围内按照相关法律法规和技术标准要求全面落实实施。2020年1月《中华人民共和国密码法》开始正式施行,商用密码应用安全性评估也在有序推广和逐步推进。…

信息安全之网络安全防护

先来看看计算机网络通信面临的威胁: 截获——从网络上窃听他人的通信内容中断——有意中断他人在网络上的通信篡改——故意篡改网络上传送的报文伪造——伪造信息在网络上传送 截获信息的攻击称为被动攻击,而更改信息和拒绝用户使用资源的攻击称为主动…

深入了解高压电阻器的世界,探索其操作、类型和在各种高压应用中的关键作用

高压电阻器是高压条件下的专用元件,对于管理电压和散热至关重要 它们的工作原理是欧姆定律 类型包括线绕电阻、碳复合电阻、金属氧化物膜电阻、厚膜电阻和薄膜电阻这些电阻器在电力系统、医疗设备、汽车电子和电信设备中是必不可少的。 额定电压从600V到48KV 80p…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表,可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

基础算法-去重字符串,辗转相除法,非递归前序遍历二叉树题型分析

目录 不同子串 辗转相除法-求最大公约数 二叉树非递归前序遍历 不同子串 从a开始,截取 a aa aaa aaab 从第二个下标开始a aa aab 从第三个 a ab 从第四个 b 使用set的唯一性,然后暴力遍历来去去重,从第一个下标开始截取aaab a aa aaa aaab…

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结

代码随想录算法训练营第36天|738.单调递增的数字|968.监控二叉树|总结 738.单调递增的数字 https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html class Solution { public:int monotoneIncreasingDigits(int n) {string s…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

【分类评估指标,精确率,召回率,】from sklearn.metrics import classification_report

from&#xff1a; https://zhuanlan.zhihu.com/p/368196647 多分类 from sklearn.metrics import classification_report y_true [0, 1, 2, 2, 2] y_pred [0, 0, 2, 2, 1] target_names [class 0, class 1, class 2] # print(classification_report(y_true, y_pred, targe…

学浪m3u8视频解密

学浪视频在网页上并不是mp4&#xff0c;而是以m3u8进行传输&#xff0c;使用m3u8可以有效解决服务器的压力&#xff0c;而且不仅仅是m3u8&#xff0c;还加密了key&#xff0c;需要逆向key算法得到真实key 下面是学浪m3u8视频解密的工具&#xff0c;全程自动化&#xff0c;不需…

MobileSAM 项目排坑

MobileSAM 项目排坑 任务过程记录创建环境交互式测试notebookV2测试 任务 把MobileSAM这个项目跑通&#xff0c;明天就可以集中学习SAM、MobileSAM、EfficientSAM和Segformer的论文和代码了。 过程记录 创建环境 老样子&#xff1a; git clone https://github.com/Chaonin…

《系统架构设计师教程(第2版)》第8章-系统质量属性与架构评估-01-软件系统质量属性

文章目录 1. 质量属性概念1.1 软件系统质量1.2 软件质量属性概述1.3 各生命周期的质量属性1.2.1 开发期质量属性1.2.2 运行期质量属性 2. 面向架构评估的质量属性2.1 性能(Performance)2.2 可靠性 (Reliability)2.2.1 容错2.2.2 健壮性 2.3 可用性 (Availability)2.4 安全性 (S…

macOS Sonoma如何查看隐藏文件

在使用Git进行项目版本控制时&#xff0c;我们可能会遇到一些隐藏文件&#xff0c;比如.gitkeep文件。它通常出现在Git项目的子目录中&#xff0c;主要作用是确保空目录也可以被跟踪。 终端命令 在尝试查看.gitkeep文件时&#xff0c;使用Terminal命令来显示隐藏文件 default…

c(RGDfK)-Biotin,生物素Biotin标记细胞穿膜环肽c(RGDfk)

c(RGDfK)-Biotin&#xff0c;生物素Biotin标记细胞穿膜环肽c&#xff08;RGDfk&#xff09; 中文名称 &#xff1a;生物素Biotin标记c&#xff08;RGDfk&#xff09;环肽 英 文 名 &#xff1a;c(RGDfK)-Biotin 品 牌 &#xff1a;Tanshtech 单字母&#xff1…

Autodesk Maya 2025---智能建模与动画创新,重塑创意工作流程

Autodesk Maya 2025是一款顶尖的三维动画软件&#xff0c;广泛应用于影视广告、角色动画、电影特技等领域。新版本在功能上进行了全面升级&#xff0c;新增了对Apple芯片的支持&#xff0c;建模、绑定和角色动画等方面的功能也更加出色。 在功能特色方面&#xff0c;Maya 2025…
最新文章