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

本文主要是介绍爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

诊断篇icon-default.png?t=N7T8https://blog.csdn.net/m0_56758840/article/details/135170994?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170333243316800180644102%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=170333243316800180644102&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-135170994-null-null.142%5Ev96%5Epc_search_result_base7&utm_term=%E7%88%AC%E8%99%AB%E5%B7%A5%E4%BD%9C%E9%87%8F%E7%94%B1%E5%B0%8F%E5%88%B0%E5%A4%A7%E7%9A%84%E6%80%9D%E7%BB%B4%E8%BD%AC%E5%8F%98---%EF%BC%9C%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%BA%8C%E7%AB%A0%20Scrapy%E5%BC%80%E5%A7%8B%E5%BE%88%E5%BF%AB%2C%E8%B6%8A%E6%9D%A5%E8%B6%8A%E6%85%A2%28%E8%AF%8A%E6%96%AD%E7%AF%87%29%EF%BC%9E&spm=1018.2226.3001.4187

前言:

诊断篇已经讲了(链接在上面),如何分析出自己的scrapy出了什么问题! 一般来说,如果不是网络ip问题,大部分都是内存泄漏问题~

而在内存泄漏里面,普遍的现象就是request和item的处理,在一开始就出现了设计问题;本章,就来讲讲,这两个部位出现问题的`通治法`!

---------就像,看到发热流鼻涕的,就给他999感冒灵!  看到这两出现问题,我也先给开个`通药`!

正文:

问题分析:

当通过Telnet检测到Scrapy中有大量的请求(request)和数据项(item)堆积,并且最老的请求或数据项的时间戳显示为较长时间前(如几百秒前),是什么原因导致的呢?

答:

  • 爬虫逻辑问题:可能的原因是爬虫逻辑中存在问题,导致爬虫无法及时处理或发送请求。这可能是由于某些错误的条件判断或复杂的逻辑流程导致的。例如,在处理请求时,可能发生了死循环或未正确处理返回的响应,导致请求无法完成并持续堆积。
  • 下载或处理延迟:这个问题也可能由于下载或数据处理的延迟引起。如果某些请求需要较长时间才能完成下载或处理,而在此期间新的请求不断被添加到队列中,就会导致堆积的情况。这可能是由于目标网站的响应时间较慢、Scrapy设置的下载延迟较低或数据处理过程较为耗时等原因引起的。
  • 并发设置不合理:Scrapy的并发设置可能会影响请求和数据项的堆积情况。如果并发设置过高,则会导致过多的请求同时发送和处理,可能会造成请求堆积。相反,如果并发设置过低,则处理速度可能无法跟上请求的生成速度,也会导致请求和数据项的堆积。
  • 资源限制:Scrapy运行的系统资源限制(例如CPU、内存、网络带宽等)也可能是问题的原因。如果系统资源不足,Scrapy无法及时处理请求和数据项,导致堆积的情况发生。

剖析+解决:

既然已经知道了,可能是这4项解决影响的;那么怎么解决他们呢?

答:

爬虫逻辑问题:
  • 仔细检查爬虫代码并进行逐行调试,查找可能导致请求堆积的逻辑错误。
  • 检查条件判断和循环语句是否正确,确保它们能够正常终止和跳出。
  • 确保在处理响应或生成请求时,正确地使用回调函数和管道等Scrapy机制。

下载或处理延迟:
  • 增加下载延迟(DOWNLOAD_DELAY),使得请求之间有较长的时间间隔。
  • 检查和优化爬虫中的数据处理过程,确保它们能够高效地处理数据项。
  • 调整Scrapy的并发设置,适当限制同时发送和处理的请求数量。
并发设置不合理:
  • 调整Scrapy的并发设置,适当增加并发请求和并发处理的数量,以提高处理能力。
  • 分析系统资源使用情况,确保调整后的并发设置不会超出系统资源的限制。
  • 根据目标网站的响应速度和服务器负载情况,动态调整并发设置。

资源限制:
  • 增加系统资源,例如更强大的计算机、更高带宽的网络连接等。这样可以提供更多的处理能力以减轻请求堆积的压力。
  • 使用分布式架构,如Scrapy-Redis或Scrapyd,将任务分发到多个节点上进行处理,以扩展处理能力。
  • 优化爬虫代码和数据处理过程,提高其效率以减少资源占用。

问题通治法:

1. 增加并发限制:检查Scrapy的并发设置,例如`CONCURRENT_REQUESTS`和`CONCURRENT_ITEMS`。你可以尝试增加这些设置的值,以允许更多的同时请求和处理,从而减少请求和数据项的堆积。不过,你需要根据自己的网络和系统资源进行适当的调整,避免对服务器和网络造成过大的压力。

        细讲:
  • 打开Scrapy项目的设置文件(通常是settings.py),找到并发设置的相关项,例如CONCURRENT_REQUESTS和CONCURRENT_ITEMS。
  • 增加这些设置的值,以允许更多的同时请求和处理。例如,将CONCURRENT_REQUESTS设置为10,CONCURRENT_ITEMS设置为100。
# settings.py
CONCURRENT_REQUESTS = 10
CONCURRENT_ITEMS = 100

2. 调整下载延迟:如果请求过多导致了堆积,你可以尝试调整下载延迟。通过增加`DOWNLOAD_DELAY`设置的值,可以让Scrapy在发送请求之间增加延迟,以减缓请求速率,防止过快地发送请求。这样有助于控制请求的堆积情况。

  • 在Scrapy项目的设置文件中找到DOWNLOAD_DELAY设置项。
  • 增加DOWNLOAD_DELAY的值,以减慢请求的发送速率。例如,将DOWNLOAD_DELAY设置为2秒。
# settings.py
DOWNLOAD_DELAY = 2

3. 优化爬虫逻辑:检查你的爬虫逻辑,确保它们高效而无死循环。确保你所写的爬虫逻辑能够在合理的时间内处理请求和数据项,不会由于错误的逻辑导致大量的堆积。

  • 检查你的爬虫逻辑,确保它们高效而无死循环。
  • 确保你的代码在处理每个请求时能够合理地执行必要的操作,而不会导致过度延迟或占用过多资源。


4. 使用分布式爬虫或调度器:如果以上方法无法解决问题,可以考虑使用分布式爬虫框架,如Scrapy-Redis或Scrapyd,以分散请求和数据项的处理负载。这样可以将请求和数据项分发到多个爬虫节点进行处理,从而减轻单个Scrapy进程的压力。

5. 调整资源配置:检查你的系统资源配置,确保Scrapy运行时有足够的CPU、内存和网络带宽。如果你的系统资源不足,可能会导致请求和数据项积压的问题。

总结:

在我们的Scrapy世界中,当遇到请求堆积和数据项积压的问题时,我们需要像一名智慧医生一样,找出病因并施以治疗。
首先,爬虫逻辑问题就像是食道中的狭窄,导致食物无法顺利通过。我们需要检查代码,确保没有死循环的陷阱,并确保正确处理返回的响应,避免请求不断堆积在那里。
其次,下载延迟问题就像是吞咽过快,导致食物堆积在胃里。调整下载延迟就像是调整我们的吃饭速度,减慢发送请求的速率,让Scrapy有足够的时间处理已下载的数据。
并发设置不合理就像是刚开的高速公路上交通堵塞。我们需要合理调整并发设置,增加交通流量的容量,使更多的请求能够顺畅通过。
最后,资源限制就像是我们缺乏能量和力量来处理大量请求和数据项。我们需要增加系统资源,就像补充营养和锻炼身体一样,让Scrapy拥有更强的处理能力。
通过综合利用这些治疗方法,就像一名医生调配药方一样,我们可以很好地解决Scrapy中的请求和数据项堆积问题,让我们的爬虫在网络世界中自由畅行。

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



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

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

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

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

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

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

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情