爬虫工作量由小到大的思维转变---<第二十二章 Scrapy开始很快,越来越慢(诊断篇)>

前言:

相信很多朋友在scrapy跑起来看到速度200+/min开心的不得了;可是,越跑到后面,发现速度变成了10-/min;刚开始以为是ip代理的问题,结果根本不得法门...

新手跑3000 ~ 5000左右数据,我相信大多数人没有问题,也不会发现问题;

可一旦数据量上了10W+,你是不是就能明显感觉到速度逐渐下降了!!

于是,你以为是要开始分布式! 分出来之后,果真发现,好使!!速度上去了----但如果你这时候跑100/1000w+的数据,你一样还是要出问题! 因为,你的scrapy设计在单个spiders的时候,就出问题了!但问题出在哪?

我准备用3章来解决这个'scrapy速度越来越慢'的问题!

(目前来看,好像只有我在做这事了;会不会侵害到XX,请私联我.我就删文)

正文:

首先,我们需要诊断问题的关键是用一个检测工具;也是scrapy手册里讲的`telnet`:

telnet用途:

  1. 查看爬虫状态:你可以使用Telnet命令来查看正在运行的爬虫的状态,包括已爬取的页面数、请求队列中的请求数、已抓取的数据等统计信息。
  2. 动态修改配置:通过Telnet,你可以修改Scrapy的配置选项,例如下载延迟、请求头、请求过滤规则等,而无需停止和重新启动整个Scrapy进程。
  3. 控制爬虫行为:你可以通过Telnet命令暂停、恢复或终止正在运行的爬虫。这对于调试和管理爬虫的行为非常有用。
  4. 执行扩展命令:Scrapy提供了一些内置的扩展命令,可以通过Telnet进行调用,例如导出爬取的数据、监视爬虫性能等。

windows如何使用?

相信你看到网上的教程用的时候,会遇上这种问题;这是因为,你没有开启telnet;

如何开启telnet:


在控制面板里面,找到这个客户端,勾上-->确认!就是开启!

随后,cmd-->输入:telnet 

欢迎使用 Microsoft Telnet ClientEscape 字符为 'CTRL+]'Microsoft Telnet>

出现这种,就是成功了(表示开启了telnet)

如何连接scrapy,进行监控呢?

1.设置爬虫setting里面:

我不推荐None,因为我发现设置None的时候,他还是需要密码;且经常卡bug-->于是,我自己在监控的时候,会设置一个简单的账号/密码,如图:

2.运行你的爬虫;让他开始工作...

如果你没有设置账号密码,他会在日志的info里,有这么一段:

这是是scrapy生成的随机密码;(所以,我推荐你自己定一个密码好些,后面没那么多事!)

3.开启telnet,查看scrapy运行状况

cmd--->输入:

telnet localhost 6023

然后,对应输入你的账号/密码 (输入密码的时候,没反应;直接输完,回车就行了!)

4.telnet命令:

  1. help:显示可用的Telnet命令列表,以及每个命令的简要说明。
  2. shell:打开Scrapy shell,允许你在交互式Python环境中执行Scrapy的操作和命令。
  3. stop:停止当前正在运行的爬虫。
  4. start:启动之前已经停止的爬虫。
  5. pause:暂停当前正在运行的爬虫。
  6. resume:恢复之前暂停的爬虫。
  7. list:列出当前正在运行的爬虫和已完成的爬虫的状态。
  8. status:显示当前正在运行的爬虫的状态信息,包括请求和响应的统计数据。
  9. spiders:显示已定义的爬虫列表。
  10. stats:显示当前Scrapy进程的全局统计信息,例如已处理的请求数、失败数等。
  11. log [level]:设置和显示当前日志记录的级别。可选的level参数包括DEBUG、INFO、WARNING、ERROR和CRITICAL。
  12. close_spider [spider_name]:关闭指定名称的爬虫。

例如(想启动一个已经定义的爬虫)

start spider_name

5.诊断:

我们的关键是找到为什么scrapy会越来越慢...

于是,我们可以输入:

prefs()--->看图说话:

我们可以看到表上,当我的爬虫已经运行一段时间后:

缓存中累计有1178条item,最老的一条是在368秒前

request请求,有5840调,最老的也是在368秒前

.....

他表示:我的scrapy里面,问题最大的是在request,他已经堆积了很多没有处理完的任务;当调度器从一开始在100条数据里进行调度,再慢慢增加到5840条数据,你说他的速度是不是就慢了?

------这也就是为什么我们的scrapy会越来越慢,归根结底是内存泄漏--->通俗点:内存没好好管理,释放;导致6分钟以前的请求还卡在调度器里,一直没发起请求; 导致管理这个scrapy的内存慢了,于是处理起来速度就慢了!

总结:

分享的这个案例,并不是说所有的scrapy都是request的请求满的问题;但是,可以通过telnet的监控工具,来检查一下,自己的scrapy是否健康;哪一块会有问题?  就跟去医院拍X光照一样,对症诊断...你只有保证每一只爬虫都是健康的情况下,再去突破瓶颈开发分布式,才是王道; 否则,你的爬虫看起来能跑,但生命力不强,就是这个原因!!!

-------这一章讲完了"诊断",下一章教"医病"!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity PlayerPrefs存储数据在Windows环境中本地存储的位置

Unity PlayerPrefs存储数据在Windows环境中本地存储的位置 一、编辑器模式下的PlayerPrefs存储位置1.Win r 输入regedit进入注册表界面2. HKEY_CURRENT_USER/Software/Unity3.CompanyName和ProjectName可以在Unity->Edit->Project Settings->Player中查看和设置 二、…

华为设备文件系统基础

华为网络设备的配置文件和VRP系统文件都保存在物理存储介质中,所以文件系统是VRP正常运行的基础。只有掌握了对文件系统的基本操作,网络工程师才能对设备的配置文件和VRP系统文件进行高效的管理。 基本查询命令 VRP基于文件系统来管理设备上的文件和目录…

【低照度图像增强系列(1)】传统方法(直方图、图像变换)算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务,常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题,给检测带来一定的难度。 🌻使用图像增强模块对原始图像进行画质提升,恢复各类图像信息,再使用目标检…

【Spring实战】04 Lombok集成及常用注解

文章目录 0. 集成1. Data2. Getter 和 Setter3. NoArgsConstructor,AllArgsConstructor和RequiredArgsConstructor4. ToString5. EqualsAndHashCode6. NonNull7. Builder总结 Lombok 是一款 Java 开发的工具,它通过注解的方式简化了 Java 代码的编写&…

Quartz.NET 事件监听器

1、调度器监听器 调度器本身收到的一些事件通知,接口ISchedulerListener,如作业的添加、删除、停止、挂起等事件通知,调度器的启动、关闭、出错等事件通知,触发器的暂停、挂起等事件通知,接口部分定义如下&#xff1a…

算数平均数、调和平均数、几何平均数的计算方法与应用场合

一 定义 1、算数平均数:又称均值,是统计学中最基本,最常用的一种平均指标,分为简单算术平均数、加权算术平均数。 2、调和平均数:又称倒数平均数,是总体各统计变量倒数的算数平均数的倒数。分为数学调和平…

深度学习中的池化

1 深度学习池化概述 1.1 什么是池化 池化层是卷积神经网络中常用的一个组件,池化层经常用在卷积层后边,通过池化来降低卷积层输出的特征向量,避免出现过拟合的情况。池化的基本思想就是对不同位置的特征进行聚合统计。池化层主要是模仿人的…

ubuntu22.04+ROS2推荐匹配的gazebo版本

放大以后看到: 可以看到ros2推荐使用版本是humble-----匹配的是Ubuntu22.04LTS -------匹配gazebo Harmonic

二叉树进阶题目(超详解)

文章目录 前言根据二叉树创建字符串题目分析写代码 二叉树的层序遍历题目分析 写代码二叉树的层序遍历II题目分析写代码 二叉树的最近公共祖先题目分析写代码时间复杂度 优化思路优化的代码 二叉搜索树与双向链表题目分析写代码 从前序与中序遍历序列构造二叉树题目分析写代码从…

每日一题——LeetCode860

个人方法: 用change数组保存我们拥有的零钱的数量,change数组只有change[5]、change[10]、change[20]是有效的,其值代表了不同面值的零钱拥有多少张 顾客付了多少钱,先把钱存入零钱数组,然后计算需要找零的金额&…

【计数DP】牛客小白月赛19

登录—专业IT笔试面试备考平台_牛客网 题意 思路 首先做法一定是计数 dp 然后状态设计,先设 dp[i] 然后看影响决策的因素:两边的火焰情况,那就 dp[i][0/1][0/1]表示 前 i 个,该位有无火焰,该位右边有无火焰的方案数…

【SpringBoot】之Security进阶使用(登陆授权)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之Security系列》。&#x1f3af…

智能优化算法应用:基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于天鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

如何通过UMC配置外围组件

随着云计算技术的不断发展,在信息化建设模式上云是大势所趋。对于企业而言,已建立的内部集成并不能支撑其快速搭建开发环境、快速部署集群服务,并且动态水平扩展对多组织情况许可费用高昂、没有敏捷快速迭代机制,导致开发完毕就落…

增量式旋转编码器在STM32平台上的应用

背景 旋钮是仪器仪表上一种常见的输入设备,它的内部是一个旋转编码器,知乎上的这篇科普文章对其工作原理做了深入浅出的介绍。 我们公司的功率分析仪的前面板也用到了该类设备,最近前面板的MCU从MSP430切换成了STM32,因此我要将…

Could not resolve com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28.

1、首先进入阿里云maven仓库,在搜索栏输入无法下载的依赖名称,查询现有版本号,可以看到这里有2.9.34。 2、在build.gradle(Project)的buildscript闭包下替换为阿里云maven仓库: maven { url https://www.jitpack.io } maven { u…

基于 ACK One 实现简单的跨云协同,让业务管理更高效

作者:庄宇 本文根据 2023 云栖大会现场分享实录整理 2 年前的云栖大会,我们发布分布式云容器平台 ACK One,随着 2 年的发展,很高兴看到 ACK One 在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报…

中心性算法归纳

中心性算法不仅是在我所学习的计算机网络当中起很重要的作用,在交通网络、社交网络、信息网络、神经网络当中也有很多的应用例子。今天我在这里总结一下场景的几种中心性算法。 参考文献 Python NetworkX库 偏心中心性(Eccentricity Centrality&#x…

银河麒麟v10 rpm安装包 安装mysql 8.35

银河麒麟v10 rpm安装包 安装mysql 8.35 1、卸载mariadb2、下载Mysql安装包3、安装Mysql 8.353.1、安装Mysql 8.353.3、安装后配置 1、卸载mariadb 由于银河麒麟v10系统默认安装了mariadb 会与Mysql相冲突,因此首先需要卸载系统自带的mariadb 查看系统上默认安装的M…

网络安全行业术语

病毒 是在计算机程序中插入的破坏计算机功能或者数据的代码,能影响计算机使用,能自我复制的一组计算机指令或者程序代码。 抓鸡 利用使用大量的程序的漏洞,使用自动化方式获取肉鸡的行为,即设法控制电脑,将其沦为肉…