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

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

问题描述

针对这样的一个网站:

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.mzph.cn/news/854814.shtml

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

相关文章

TOP10!YashanDB斩获广东省优秀信创产品与解决方案双料荣誉

近日,2024广东软件风云榜结果出炉,表彰为广东软件产业和数字经济、新型工业化发展作出突出贡献的企业、企业家、优秀产品等。深算院崖山数据库系统 YashanDB荣获广东省“2024年优秀信息技术应用创新产品TOP10”和“2024年优秀信息技术应用创新行业应用解…

java 对象实际占用内存大小预估工具类ObjectSizeUtil

java 对象实际占用内存大小预估工具类 返回对象占用预估字节数 返回字节数对应格式化后的字符串(xx Kb) 使用效果 依赖了lombock和hutool,项目不用这个可以去掉日志,稍微改写一下。 import cn.hutool.core.util.ClassUtil; i…

docker怎么拉取全部镜像,打包所有镜像

因为docker,所以我把电脑上之前的镜像全部打包出来了 你们也可以打包,我提供一个脚本,你运行即可 export_docker.sh #!/bin/bash# 导出目录 EXPORT_DIR"docker_images_backup" mkdir -p "$EXPORT_DIR"# 获取所有镜像 …

PythonPoc基础编写(3)---批量刷cnvd

文章目录 前言一、发现过程二、使用步骤1.引入库2.读入数据结果 总结 前言 想刷cnvd?最重要的是登录进行测试功能点 一、发现过程 找到一个网站 发现登录失败返回200 登录成功则是重定向 302 那就写一个脚本吧 二、使用步骤 1.引入库 import requests 2.读入…

安装AutoCAD异常

问题: 安装Autodesk产品时,显示以下消息,且安装未完成。 正在等待操作系统重新启动。 请重新启动计算机以安装 AutoCAD 2024。 操作系统: Windows 10Windows 11 原因: Windows注册表项已损坏。Microsoft Visual C …

微射流均质机可用于纳米制剂和材料制备 我国市场需求空间广阔

微射流均质机可用于纳米制剂和材料制备 我国市场需求空间广阔 微射流均质机是一种纳米级乳化及分散的处理设备,工作原理是在加压状态下,高压流体经过微细孔径喷嘴后,形成高速微射流,从而产生强大的涡流和切应力,将颗粒…

ESP8266-01S烧录MQTT固件ERROR问题

今天在烧录ESP8266固件时遇到了这个问题,技术客服给了个有效的解决方案。 选择固件的时候可以先确认自己的模块是ESP8266或者EPS8285主控,这在选择DOWNLOADTOOL时还不一样。 然后波特率是115200,我在这个地方选错成1152000。 当然上面都不…

【ARM Cache 及 MMU 系列文章 1.4 -- 如何判断 L3 Cache 是否实现?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Cluster Configuration Register代码实现什么是Single-Threaded Core?什么是PE(Processor Execution units)?Single-Threaded Core与PE的关系对比多线程(Multithreading)Cluster…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时,确保输入的值合法性是十分重要的。为了实现这一点,你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法,你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

小区噪音监测管理系统设计

一、引言 随着城市化进程的加快,小区居民对于居住环境的要求日益提高。其中,噪音污染已成为影响居民生活质量的重要因素。因此,设计一套小区噪音监测管理系统,对于提升居民的生活品质和小区管理效率具有重要意义。本文将详细阐述…

数据资产驱动的智能化决策:深度剖析数据资产在提升企业决策效率与准确性中的关键作用

在数字化、信息化日益普及的今天,数据已经成为企业发展的重要资产。数据资产不仅能够帮助企业更好地了解市场需求、优化业务流程,还能在决策过程中提供科学、精准的支持。本文将深入剖析数据资产在提升企业决策效率与准确性中的关键作用,探讨…

电脑文件防泄密软件——天锐绿盾 - 中科数安—— 哪个好

在选择电脑文件防泄密软件时,天锐绿盾和中科数安都是值得考虑的选项。以下是对这两款软件的详细比较: www.drhchina.com PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 功能全面性: 天锐…

Java内存模型(JMM)详解

文章目录 1、Java内存模型2、JMM的核心概念1)主内存与工作内存2)内存可见性3)JMM的三大特性:原子性、可见性、有序性。 3、JMM中的八种操作4、Happens-before 规则5、样例: 1、Java内存模型 Java内存模型(…

系统安全(补充)

基于行的自主访问控制的方法有能力表、前缀表、口令基于列的自主访问控制的方法有访问控制表、保护位口令是当前大多数网络实施访问控制进行身份鉴别的重要依据,因此,口令管理尤为重要,一般遵守一般遵守以下原则:1口令选择应至少在…

一种可以识别局部单调的系数

记录一种可以识别局部单调的系数 pearson和kendall等系数再识别单调的时候,更多是关注整体情况,很多时候,变量和因变量之间非简单的单调关系,局部单调ξ识别 假设我们正在测量变量X和Y之间的关系。传统的相关性测量方法通常假定…

Go - 3.库源码文件

目录 一.引言 二.库源码文件 1.定义 2.生成库源码文件 3.直接调用库源码文件 三.总结 一.引言 前面我们学习了 命令源码文件,并成功运行了 go 的 hello world 代码,下面我们介绍 go 里面另一个概念: 库源码文件。 二.库源码文件 1.定义 库源码文…

一看就会!Win11文件资源管理器的打开方法!

在Win11电脑操作中,用户可以借助文件资源管理器轻松管理文件或文件夹。但是,许多新手用户不知道要怎么操作才能顺利打开文件资源管理器?接下来小编给大家介绍五种简单快速的打开Win11系统文件资源管理器的方法。 方法 1:WindowsE …

企业邮箱大附件无法上传?无法确认接收状态?这样解决就行

Outlook邮箱作为最常用的邮箱系统,被全世界企业采用作为内部通用沟通方式,但Outlook邮箱却有着明显的使用缺陷,如邮箱大附件上传障碍及附件接收无提示等。 1、企业邮箱大附件无法上传 Outlook企业邮箱大附件的上传上限一般是50M,…

SpringSecurity6从入门到实战之自定义登录页面

SpringSecurity6从入门到实战之自定义登录页面 在使用SpringSecurity进行认证操作的时候,可以发现默认提供的登录页面比较简陋.那么我们能否对登录页面进行自定义配置呢?接下来开始讲解应该如何进行配置 自定义登录页面流程 引入模板依赖 由于自定义登录页面会使用到前端相关…

测试单选框

单选按钮:用于在一组互相排斥的选项中选择其中一项; 由一个圆圈和紧随其后的文本标题组成,当它被选中时,圆圈中就标上一个黑点。 通常将一组单选按钮放在一个组框控件中,在一组单选按钮中,第一个(Tab键顺序…