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

本文主要是介绍爬虫工作量由小到大的思维转变---<第二十二章 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光照一样,对症诊断...你只有保证每一只爬虫都是健康的情况下,再去突破瓶颈开发分布式,才是王道; 否则,你的爬虫看起来能跑,但生命力不强,就是这个原因!!!

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

这篇关于爬虫工作量由小到大的思维转变---<第二十二章 Scrapy开始很快,越来越慢(诊断篇)>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/531553

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

颠覆你的开发模式:敏捷思维带来的无限可能

敏捷软件开发作为现代软件工程的重要方法论,强调快速响应变化和持续交付价值。通过灵活的开发模式和高效的团队协作,敏捷方法在应对动态变化和不确定性方面表现出色。本文将结合学习和分析,探讨系统变化对敏捷开发的影响、业务与技术的对齐以及敏捷方法如何在产品开发过程中处理持续变化和迭代。 系统变化对敏捷软件开发的影响 在敏捷软件开发中,系统变化的管理至关重要。系统变化可以是需求的改变、技术的升级、

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、