【scrapy】爬虫,从429状态码说起

news2024/10/5 23:29:47

许久未爬,发现爬不动了,哈哈哈,记录下这次失败的爬取经历

问题描述

针对这样的一个网站:

https://www.farfetch.cn/cn/shopping/women/dresses-1/items.aspx?page=1&view=96&sort=3

需求:

1.需要爬取列表页的主图

请添加图片描述

2.爬取详情页的商品信息

请添加图片描述

这个网站看起来吧好像挺容易的,去爬就知道厉害了:

当多次爬取之后(比如7、8次),就会遇到遇到429的问题。如它所提示,这个使访问太频繁导致,其实也就是网站识别出了这个ip,触发了反爬机制。
请添加图片描述

429的含义

HTTP状态码429表示客户端发送的请求过多,超出了服务器的处理能力或限制。它是一种反应速率限制的状态码,用于告知客户端暂时无法处理请求。服务器通过返回状态码429,希望客户端减少请求频率或采取其他措施来降低服务器的负载。
一句话:单个ip频繁访问达到服务器限制就会触发429
参考:https://blog.csdn.net/q7w8e9r4/article/details/133639163

如何解决

下面是我总结的网上提及的几种思路,难度从低到高:

(1) 添加header信息,使其看起来更像浏览器访问。

- 固定user-Agent:如下面是google浏览器的请求信息,当固定使用一个时,被识别为爬虫的风险很高

USER_AGENT = ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36’

- 轮换User-Agent:每次请求时就随机切换一个,模仿不同浏览器和设备访问

(2)两个请求之间增加延时:
- 有些服务器会在返回的头部中添加"Retry-After",告诉你多久之后重试。获取这个值,然后sleep就可以了。

- 在setting.py中增加请求延长时间,可以固定或者随机选择一个时间进行动态延时

- 在爬虫代码中增加延时,如在解析时添加time.sleep(2)

(3)使用AutoThrottle中间件或者setting.py中添加AUTOTHROTTLE_ENABLED = True,根据服务器API的响应情况自动调整请求速率,从而避免触发API的限制。

(4)使用代理ip池,每次请求随机选择一个代理IP

- 免费代理:如站大爷,试了几个,效果很差,不能代理

- 收费代理:没试过,不知道哪个网站收费便宜好用。

(5)分布式爬虫:将请求分散给多个爬虫示例,每个示例使用不同的ip地址

没试过。

(1)-(3)我都试过了,都无效,因为这个网站哪怕是在浏览器中手动连续刷新它多次,也会报429,说明这个与header无关,应该就是单纯的限制单个ip频繁访问(很简单粗暴)。

因此要真正避免触发反爬机制,只有从单个ip和频繁访问这两个因素入手。

针对单个ip的问题:

一是可以使用代理ip池,换句话说,对于现在的网站,不使用代理ip池是容易就被识别为爬虫,导致禁止访问的。

二是可以使用分布式爬虫,这块当前没用过,不多说。

针对频繁访问的问题:

一是可以使用一个较多数量的代理池,比如2000个,那么你这边有2万次请求,分散到每个代理IP,那么每个ip也只会请求10次(且每次之间的间隔时间是比较长的,),此时对于每个代理IP访问网站,都是一个低频的状态,基本不会触发429。

当有代理池存在时,就可以充分利用scrapy的异步和并发机制。

二是可以设置动态延时,爬虫的每个请求发给代理时,也设置一个延迟(用动态的是为了模拟人的行为),但因为分散给多个代理进行爬取(对服务器而言还是存在着一个短时间高访问的异常现象,但因为是多个ip,每个ip都不会触发反爬机制),这个延迟时间可以设置不那么大(比如2秒),此时对爬取的服务器的压力会减小,属于一个友好操作。

小结

现在的网站基本上都会有反爬措施存在,不上一些复杂的手段,如代理ip池+模仿浏览器行为(添加header并轮换)+模仿用户访问行为(动态延时+不规律的点击访问等),大一些或者专业一些的网站基本上就爬不动了。

下期预告:
这个网站除了上面的限流访问机制,还存在着网页动态加载的问题(如此时scrapy直接解析列表页的图片地址,则只能获取到前面11个预加载的信息,剩下的信息都是需要在页面滚动过程中才实时加载),针对这个问题,后面再单独开一篇文章进行总结。

参考资料

https://blog.51cto.com/u_16175513/10325418【Python 爬虫状态码 429解决方法】

https://www.cnblogs.com/yoyo1216/p/12794365.html【SCRAPY 429 处理】

https://www.yisu.com/jc/449564.html【python爬虫中怎么处理429错误】

https://blog.csdn.net/Z_suger7/article/details/134929657【解决HTTP 429错误的Scrapy中间件配置】

https://blog.csdn.net/lionking1990/article/details/113244448【python 爬虫 处理429错误】

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

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

相关文章

MySQL中的客户端选项(二)

在全局选项文件之后读取此选项文件,但(在Unix上)在用户选项文件之前读取。如果文件不存在或无法访问,则会发生错误。如果file_name不是绝对路径名,则会相对于当前目录进行解释。 仅使用给定的选项文件。如果文件不存在…

HACH哈希紫外可见光分光光度计维修DR6000

DR3900可见分光光度计内置准双光束光学系统,自动校准波长,该可见光分光光度计预置200多个用户程序,几乎覆盖常规水质参数,彩色触屏搭载中文操作界面,可自动分析检测并存储2000组实验数据,是一款测量准确的可…

《EDA技术》 Quartus图3—4实验报告

目录 一:结构描述方式 1.1创建工程 1.1.1点击New Project Wizard,创建t34工程。 1.1.2设置工程路径和名称(t34) 1.2设计门电路 1.2.1设计三输入或非门VHDL程序 1.2.2 设计非门VHDL程序 ​编辑 1.2.3 设计二输入或非门VHD…

ubuntu16因swap分区uuid错误启动慢排查

感觉ubuntu16启动特别慢 dmesg查看如下: [ 10.050123] audit: type1400 audit(1718608189.395:11): apparmor"STATUS" operation"profile_load" profile"unconfined" name"webbrowser-app//oxide_helper" pid708 comm&q…

【测试专题】系统测试报告(原件Word)

软件测试报告在软件开发过程中起着至关重要的作用,主要有以下几个主要原因: 1、确保软件质量 2、提供决策支持 3、记录测试过程和结果 4、促进沟通和协作 5、符合标准和法规要求 6、改进测试流程和策略 7、降低风险 软件开发全套资料获取进主页或者本文末…

查询Kafka集群中消费组(group)信息和对应topic的消费情况

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

一款超好用的国产 Redis 可视化工具,真香!

哈喽,大家好,我是黑板报君,一个资深的软件开发工程师,致力于为大家分享各领域优质开源项目,开发前沿技术以及互联网技术圈动态。 添加图片注释,不超过 140 字(可选) 日常开发过程中…

VBA学习(5):批量生成小饼图

之前给大家分享了如何用一个函数制作各种常见图表,之后有朋友问,下图中表示精确占比的饼图是怎么批量生成的? 批量生成小饼图有两种常用的方法,一种是用插件,比如Sparklines;另外一种是自己动手丰衣足食&am…

UDS诊断、ECU刷写、OTA升级、Tbox测试、CANoe实操

每天的直播时间: 周一至周五:20:00-23:00 周六与周日:9:00-12:00,14:00-17:00 TBOX 深圳 涉及过T-BOX测试吗Ota升级涉及的台架环境是什么样的?上…

位图法-有效的数独

有效的数独,主要是判断每行每列每宫有无重复元素。 每行每列用二重循环,每宫比较复杂,需要考虑每一宫的坐标与二重循环ij对应关系 行i,每一宫3行,3列 x3*(i/3)j/3 y3*(i%3)j%3

计算机考研|双非计算机专业是考研还是就业?主要看这一点!

去看一看招聘就知道了,看看公司需要的开发或者计算机岗位要求的东西你在本科的时候有没有精通的 如果你发现:哎?看着招聘的要求好像本科多少都接触过,但现在已经忘得差不多了,或者是,哦,我知道…

金蝶云星空程序员开发快速入门

文章目录 一 前言1.1 学习步骤1.2 学习需知 二、学习金蝶*云星空的步骤2.1 下载金蝶*云星空安装到本地2.2 查看官网的学习资料2.3 如何使用C#进行插件开发2.4 sqlserver的表设计以及存储过程2.5 如何使用python进行插件的开发2.6 第三方程序如何调用金蝶*云星空的数据 三 后记 …

移动硬盘数据恢复,6个亲测有效方法公开!

“我的移动硬盘已经用了很久了,最近不知道是怎么回事,里面有部分重要的数据居然不见了。想问问大家有什么方法可以恢复移动硬盘的数据吗?” 在数字时代的浪潮中,移动硬盘已成为我们存储和携带数据的重要工具。从海量的工作文档、珍…

在虚拟机中安装centos系统,及通过安装包安装jdk1.8,mysql5.7,redis7.2

在虚拟机中安装centos系统,及通过安装包安装jdk1.8,mysql5.7,redis7.2 第一章 CentOS7的下载1.1.使用阿里云开源镜像站下载。第二章 CentOS7的配置2.1.通过VMware 创建一个CentOS7虚拟机2.1.1.打开软件,点击如箭头所示按钮,创建虚拟机2.1.2.点击自定义,之后点击下一步2.1.3…

【触想智能】工业显示器定制时需要注意的重点问题

随着工业自动化的不断发展,工业显示器越来越重要。不同于普通的娱乐和商业应用,工业显示器需要更加耐用、可靠、安全,并且满足特定的工业环境和应用需求。 因此,仔细考虑和选择适合自己的工业显示器至关重要。本文将介绍一些您在进…

【YOLOv10改进[注意力]】使用注意力MLCA改进C2f + 含全部代码和详细修改方式 + 手撕结构图

本文将进行使用注意力MLCA改进C2f的实践,助力YOLOv10目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 MLCA 二 使用注意力MLCA改进C2f 1 整体修改 2 配置文件

World Map Globe Edition 2

只需点击几下,World Political Map - Globe Edition 2就会在场景添加一个美丽且交互式的3D世界地图。将地球预制件拖动到场景中并自定义外观。 完整的资产,具有强大的可视化功能、示例和丰富的API,适用于构建VR、桌面和移动游戏和应用程序。 主要功能: - 在不访问互联网的情…

如何在前端应用程序中实现国际化(以英语为例)

如何在前端应用程序中实现国际化(以英语为例) 一、准备工作确定翻译需求:选择国际化库:创建语言文件: 二、实现步骤安装并引入国际化库:加载语言文件:在组件中使用翻译:实现语言切换…

对话华师大上海人工智能金融学院院长邵怡蕾:AI时代,人文见长的学校会非常有优势

金融,是关乎老百姓钱袋子的国民经济血脉,更是国家核心竞争力的重要组成部分。AI,是当之无愧最具「活力」的行业,也是千行百业革故鼎新的动力引擎。这两个对人类社会发展影响至深的行业,目前仍未展现出令人耳目一新的奇…

探索设计模式——单例模式详解

前言:设计模式的作用主要是为了——利用设计方式的重用来自动地提高代码的重新利用、提高代码的灵活性、节省时间, 提高开发效率、低耦合,封装特性显著, 接口预留有利于扩展。 设计模式的种类有很多种,本篇内容主要讲解…