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

news2025/1/16 18:25:45

前言:

相信很多朋友在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 Client

Escape 字符为 '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.coloradmin.cn/o/1331453.html

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

相关文章

Leetcode 435 无重叠区间

题意理解: 给定一个区间的集合 intervals 要求需要移除区间,使剩余区间互不重叠 目标:最少需要移除几个区间。 解题思路: 采用贪心思路解题,什么是全局最优解,什么是局部最优解。 全局最优解,删…

Mac使用Vmware Fusion虚拟机配置静态ip地址

一、设置虚拟机的网络为NAT 二、修改虚拟机的网络适配器网络 1、查看虚拟机的网卡 cd /etc/sysconfig/network-scripts#有些系统显示的是ens33,ens160等等 #不同的系统和版本,都会有所不同 #Centos8中默认是ens160,在RedHat/Centos7则为ens33 2、查看网…

Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析

文章目录 概述心跳检测Code模拟心跳超时正常情况 IdleStateHandler源码分析channelReadchannelActiveinitialize 概述 心跳检测 Netty 的心跳检测机制是一种用于保持网络连接活跃的机制,它通过定期发送和接收特定的消息(心跳包)来确保客户端…

111基于matlab的粒子滤波进行锂离子电池的循环寿命预测

基于matlab的粒子滤波进行锂离子电池的循环寿命预测,输出实验、粒子滤波及自然预测数据结果。程序已调通,可直接运行。 111matlab锂离子电池寿命预测 (xiaohongshu.com)

Jmeter、postman、python 三大主流技术如何操作数据库?

1、前言 只要是做测试工作的,必然会接触到数据库,数据库在工作中的主要应用场景包括但不限于以下: 功能测试中,涉及数据展示功能,需查库校验数据正确及完整性;例如商品搜索功能 自动化测试或性能测试中&a…

Leetcode—剑指Offer LCR 025.两数相加II【中等】

2023每日刷题(六十七) Leetcode—LCR 025.两数相加II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode…

【Linux笔记】文件和目录操作

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 前言 命令 ls (List): pwd (Print Working Directory): cp (Copy): mv (Move): rm (Remove): 结语 我的其他博客 前言 学习Linux命令…

2024 Jmeter 常见面试题

​ 📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试…

论文阅读——RS DINO

RS DINO: A Novel Panoptic Segmentation Algorithm for High Resolution Remote Sensing Images 基于MASKDINO模型,加了两个模块: BAM:Batch Attention Module 遥感图像切分的时候把一个建筑物整体比如飞机场切分到不同图片中,…

Unity Webgl开发日记

一、Unity设置 二、打开、创建、启动IIS服务 (1)首先需要在电脑上打开IIS服务: (2)接下来需要创建一个本地服务器: 三、打包运行报错:Unable to parse Build/Test.framework.js.unityweb!The f…

C# 基于MQTT创建客户端的可靠数据传输

C# 基于MQTT创建客户端的可靠数据传输 引言MQTT简介C# MQTT库引用代码和描述1、 代码2、 描述 引言 MQTT是tcpip的应用层协议,这里我们简单介绍一下MQTT的基本概念,并用C# 描述客户端的订阅和发布。 MQTT简介 MQTT(Message Queuing Telemetry Transpor…

面试题 01.01. 判定字符是否唯一(优质解法)

链接:面试题 01.01. 判定字符是否唯一 代码: class Solution {public boolean isUnique(String astr) {//s[i]仅包含小写字母,数据范围小于 32 位,我们可以使用 int 变量的比特位来代替数组// 每个小写字符对应 bitMap 中的一个比…

Chatgpt如何共享可以防止封号!

ChatGPT 是一个基于 GPT-3.5/GPT-4 模型的对话系统,它主要用于处理自然语言对话。通过训练模型来模拟人类的语言行为,ChatGPT 可以通过文本交流与用户互动。每个新版本的 GPT 通常都会在模型规模、性能和其他方面有一些改进。在目前免费版GPT-3.5 中&…

【AI】Langchain-Chatchat搭建本地知识库-未完,先记录踩的坑

事先说一下,我本地的显卡4070只有12G显存,无法运行本地知识库,我把自己折腾的过程和遇到的坑先记录一下吧,后续如果有算力的话就再跑一遍试试。 Langchain-Chatchat曾用名Langchain-ChatGLM,是智谱AI的本地知识库项目&…

Qt前端技术:5.QSS

这个是表示QFrame中的pushButton中的子类和它子类的子类都将背景变为red 写成大于的时候表示只有直接的子类对象才会变 这个图中的QGroupBox和QPushButton都是QFrame的直接的子类 这个中的QGroupBox是QFrame的直接的子类但是QPushButton 是QGroupBox的子类,QPushB…

如何要做好年终绩效

年终绩效,每年12月份, 都是“绩效”这个词比较热门的阶段, 各个企业各个部门避不开的话题。 那如何能做好呢,一起来看看关于 要做好年终绩效考核、绩效面谈和绩效环评的建议吧! 明确目标和指标:在考核开…

Tomcat远程调试

windows环境 写一个 startup-debug.bat,指定tomcat的根目录,端口自己定义 rem *******设置Tomcat目录*******-- set CATALINE_HOMED:\asd\A8-2\tomcat d: rem 8787为可用端口,为远程调试监听端口-- cd %CATALINE_HOME%/bin set JPDA_ADDRESS8787 set J…

JavaScript系列-函数调用之apply、call、bind

文章目录 适用场景apply定义语法具体的例子 call定义语法例子 bind定义例子语法多级绑定 小结更多内容 适用场景 apply、call、bind 三者都是 Function 原型上的方法,也就是说,基本所有函数都可以通过 函数名.apply|call|bind 调用 apply、call、bind …

centos7服务器安装 mysql

centos7服务器安装 mysql 一、下载 官网:https://dev.mysql.com/downloads/mysql/ 二、安装 1.查看有没有需要卸载的SQL包,一般系统的mariadb是自带的,需要卸载 rpm -qa | grep mysql rpm -qa | grep mariadb例如:安装过MySQL…

内存函数的学习

额外知识点 第一个 假设c为int类型,(char)c之后,之后如果还用变量c的话,c依然为int类型。()强制转换操作符并不会永久改变原本的变量类型。 第二个 \0在打印时不会显示出来 第三个 void …