爬虫工作量由小到大的思维转变---<第二十章 Scrapy几个常规参数的调整策略心得>

前言:

CONCURRENT_REQUESTS = 32  # 设置请求并发数
DOWNLOAD_TIMEOUT = 5  # 设置超时时间为5秒
RETRY_TIMES = 2  # 设置你想要的重试次数
DOWNLOAD_DELAY= 0.1  # 控制两个连续请求之间的延迟时间,设置为0.1表示每次请求之间的等待时间为0.1秒
CONCURRENT_REQUESTS_PER_DOMAIN = 20  # 每个域名的并发请求数,设置为3表示同时只能有3个请求发送到同一个域名。
CONCURRENT_REQUESTS_PER_IP= 2  # 每个IP的并发请求数,控制在同一时间向同一个IP地址发送的并发请求数量

前面章节没有详细讲述这些看似简单的参数的调整方法,导致这些参数的作用没有得到充分发挥。就像在王者荣耀中,吕布的技能一挥、一吸和一跳,看似简单,但在实际运用中,如何使技能,才能够让你的队友打出一波"666"?

因此,在本章中,我将充当一个"Scrapy参数技能教官"的角色,带你把这个设置(技能)给他嚼透了,让你的项目"666"。

正文:

问题思考:

  1. CONCURRENT_REQUESTS和CONCURRENT_REQUESTS_PER_DOMAIN参数在Scrapy中扮演着什么角色?为什么要区分全局和局部的并发请求数?
  2. 如果将CONCURRENT_REQUESTS_PER_DOMAIN设置得过高,会出现什么问题?如何合理设置该参数以避免被目标网站封禁?
  3. RETRY_TIMES参数控制爬虫的重试次数。在网络不稳定或请求频率过高的情况下,如何合理设置重试次数,以确保爬取的数据完整性和稳定性?
  4. DOWNLOAD_DELAY参数用于控制连续请求之间的延迟时间。当请求速度过快时,可能会对目标网站造成压力,甚至被封禁。如何根据目标网站的反爬策略合理设置该参数?
  5. CONCURRENT_REQUESTS_PER_IP参数用于控制同时向同一IP地址发送的并发请求数量。为什么要限制并发请求数,以及合理设置该参数的依据是什么?
  6. 在设置DOWNLOAD_DELAY时,应注意哪些因素?如何在单机调试和实际生产环境中合理设置DOWNLOAD_DELAY值?

解决复盘:

这些参数和我们设置的CONCURRENT_REQUESTS(调整全局的,并且整个Scrapy项目都遵循这个最高限制)以及CONCURRENT_REQUESTS_PER_DOMAIN(同一个域名的并发最高限制)有关!举个例子,假设在你的Scrapy项目中,需要分别对"百度/B站/抖音"三个网站发起请求,然后

CONCURRENT_REQUESTS = 32
CONCURRENT_REQUESTS_PER_DOMAIN = 8

那么,最高并发数是8*3(域名数)= 24个,并不是32个——这一点需要你明确。

所以,即使你把CONCURRENT_REQUESTS调节到100,也不会有太大影响,因为整个项目的最高并发是24个!

有些人可能会将全局设置为30,局部域名设置为10;达到了最高限制...

然而,他们没有考虑到其他问题,比如"重试/异常/超时"。

重试次数:RETRY_TIMES
异常:抛出(根据自己的代码设置)
超时:DOWNLOAD_TIMEOUT

当程序正常运行时,我们的并发量已经达到了最高限制,30/10。但一旦出现"重试/异常/超时"的情况,就需要新的线路进行请求。这时候,我们的程序已经达到负荷极限,应该如何完成由"超时/异常"引发的重试任务呢?

因此,在设置局部并发数时,不要将其与全局并发数设置得一样,要留出一些余量,以便将"重试请求"分配到全局中的空闲线路上。

这时候,我们可以有更好的设置方式:全局36/局部10 —— 留出6个空闲线路,以备突发事件。

......(当你明确理解了上述问题,请继续阅读以下内容!)

你理解了余量,就可以理解CONCURRENT_REQUESTS_PER_IP了!

接下来还是以前面的案例为例,假设我每次通过API请求代理IP的数量设置是多少比较合适呢?

如果你的最高请求数是30,那你的IP池最好保持在35-40个左右;也就是说,每次通过API请求这个数量(因为很多网站对同一个IP同时请求的次数有限制,稍微错开时间即可)。因此,个人建议将CONCURRENT_REQUESTS_PER_IP设置为1。

这样设置后,你可以同时发起最高30个请求,并使用额外的5-10个IP填充到全局空闲线路中。这样,你的程序只要其他逻辑没有问题,速度就是每次30个请求,多出来的空余线路用于后续请求和维护,程序运行流畅且高效。

对于DOWNLOAD_DELAY这个值,在单机调试时,建议将其调高;例如设置为3秒基本延迟,在使用代理IP后,可以将其设置为0或0.1秒。你也可以设置DOWNLOAD_DELAY为(2.5, 3)这样的浮动范围,不至于卡死在3秒,避免被网站检测到。

总结:

根据以上内容,你是否能够理解这些参数的重要性以及如何进行设置了呢?可以拿自己的项目试试新技能,一起`上分`吧!

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

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

相关文章

[XR806开发板试用] XR806——基于FreeRTOS下部署竞技机器人先进模糊控制器

前言 很荣幸参与到由“极术社区和全志在线联合组织”举办的XR806开发板试用活动。本人热衷于各种的开发板的开发,同时更愿意将其实现到具体项目中。秉承以上原则,发现大家的重心都放在开发中的环境构建过程,缺少了不少实际应用场景的运用&am…

【PostgreSQL】从零开始:(二十二)数据类型-枚举类型

概述 什么是枚举 枚举,又称为列举、举例或列举法,是一种通过逐一列举、点明或列举的方法来表达、阐述、说明或论述某个问题、观点或概念的过程。在数学、逻辑学和哲学中,枚举被用于证明、论证或说明某个命题、定理或理论的正确性或错误性。…

数据仓库-数据治理小厂实践

一、简介 数据治理贯穿数仓中数据的整个生命周期,从数据的产生、加载、清洗、计算,再到数据展示、应用,每个阶段都需要对数据进行治理,像有些比较大的企业都是有自己的数据治理平台或者会开发一些便捷的平台,对于没有平…

鸿蒙-HarmonyOS之初见

鸿蒙初识,此事能成!! 自己安装工具、配置环境并运行成功,流程记录。 一、首先官网下载开发工具 官网地址:https://developer.huawei.com/consumer/cn/ 当前最新的版本3.1 ,windows和Mac,Mac又…

oppo 手机刷机流程

一、操作步骤: 一)解锁BootLoader 以下是一种常见的方法,可以尝试获取OPPO手机的Root权限(以参考信息为准,具体步骤可能因设备型号和系统版本而有所不同): 11). 解锁Bootloader:首…

【Python百宝箱】优化Python开发体验:日志记录、错误监控与高级调试

标题:“Python开发者的调试与性能优化大全” 前言 在软件开发的旅程中,调试和性能优化是每位开发者都需要掌握的关键技能。Python提供了丰富的工具和库,以应对开发中的各种挑战。本文将深入探讨logging、loguru、sentry、pdb、py-spy和debu…

js中的Array.from()和Array.of()方法的用法详情

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:JavaScript小贴士 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续…

Android 12 (InputMethodManagerService) 替换默认输入法为Pinyin输入法

1.问题场景 由于系统自带的Latin输入法不支持遥控器操作,需要替换为RK的拼音输入法。 2. 替换步骤 1)将LatinIME从mk中删除,让系统编译的时候不编译该apk --- a/Android/build/make/target/product/handheld_product.mkb/Android/build/m…

VScode安装C/C++编译器步骤

一、安装C/C插件 二、安装 MinGW-w64 工具链 使用国内源 git clone https://gitee.com/cuihongxi/ubuntu2-mac.git 下载后进入到VScode文件夹下,点击msys2-x86_64-20231026.exe进行安装 完成后,确保选中“立即运行 MSYS2”框,然后选择“完…

stable diffusion工作原理

目录 序言stable diffusion能做什么扩散模型正向扩散逆向扩散 如何训练逆向扩散 Stable Diffusion模型潜在扩散模型变分自动编码器图像分辨率图像放大为什么潜在空间可能存在?在潜在空间中的逆向扩散什么是 VAE 文件? 条件化(conditioning)文本条件化&am…

深信服技术认证“SCSA-S”划重点:命令执行漏洞

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

前端验收测试驱动开发

我们听说过很多关于测试驱动开发(TDD)的内容。那么什么是ATDD? ATDD代表验收测试驱动开发,这是一种定义验收标准并创建自动化测试来验证是否满足这些标准的软件开发方法。ATDD是一种协作方法,涉及客户、开发人员和测试…

Python算法例21 交错正负数

1. 问题描述 给出一个含有正整数和负整数的数组,将其重新排列成一个正负数交错的数组。 2. 问题示例 给出数组[-1,-2,-3,4,5,6],重新排序之后,变成[-1,5,-…

docker 部署kafka

随笔记录 目录 1. 安装zookeeper 2. 安装Kafka 2.1 拉取kafka image 2.2 查询本地docker images 2.3 查看本地 容器(docker container) 2.3.1 查看本地已启动的 docker container 2.3.2 查看所有容器的列表,包括已停止的容器。 2.4 …

个人财务工具、密钥管理平台、在线会计软件、稍后阅读方案 | 开源专题 No.51

gethomepage/homepage Stars: 10.1k License: GPL-3.0 这个项目是一个现代化、完全静态的、快速且安全的应用程序仪表盘,具有超过 100 种服务和多语言翻译的集成。 快速:网站在构建时以静态方式生成,加载时间飞快。安全:所有对后…

五分钟学完DBSCAN算法

基础概念 邻1个核心思想:基于密度,依据密度的连通性分析增长聚类 2个算法参数:邻域半径R和最少点数目minpoints 这两个算法参数实际可以刻画什么叫密集——当邻域半径R内的点的个数大于最少点数目minpoints时,就是密集。 3种点的…

SQL Error:1064,SQLState:42000

SQL Error 1064 是一个常见的 SQL 错误,通常表示 SQL 语句存在语法错误或不符合数据库的规范。SQLState 42000 是表示通用语法错误的 SQL 状态码。要解决 SQL Error 1064,需要检查的 SQL 语句,确保它们符合数据库管理系统的语法规则。 引起错…

油猴脚本教程案例【长按元素】- 哔哩哔哩一键三连

文章目录 1. 元数据2. 编写函数2.1 关键函数2.2 完整代码 3. 验证和调试3.1 效果演示 4. 可能遇到的问题和解决方法5. 结语 1. 元数据 在编写油猴脚本时,首先需要设置一些元数据,包括脚本的名称、命名空间、版本、描述等信息。以下是本脚本的元数据部分…

.NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

之前写过使用自定义返回类的方式来统一接口数据返回格式,.Net Core webapi RestFul 统一接口数据返回格式-CSDN博客 但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不…

7. ASP.NET Core Blazor 官网文档

官方文档地址:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/?viewaspnetcore-8.0 Blazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性: 使用 C# 创建丰富的交互式 UI。共享使用 .NET 编写的…