【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.rhkb.cn/news/352787.html

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

相关文章

任务3.8.3 利用RDD统计每日新增用户

任务目标 统计给定用户访问历史数据中,每日的新增用户数量。 数据准备 原始数据格式:每行包含两个字段,日期和用户名,以逗号分隔。示例数据:2024-05-01,mike 2024-05-01,alice 2024-05-01,brown ...解决方案 使用倒…

解读自然语言处理:技术、应用与未来展望

引言 自然语言处理(Natural Language Processing,简称NLP)是计算机科学、人工智能和语言学的一个跨学科领域,致力于实现人与计算机之间通过自然语言进行有效沟通的能力。NLP 的核心任务是理解、解释和生成人类语言,使计…

C的I/O操作

目录 引言 一、文件与目录操作 1. 打开与关闭文件 2. 文件读写操作 3. 文件定位与错误处理 二、字符流与字节流 1. 字符流处理 2. 字节流处理 三、序列化与反序列化 1. 序列化 2. 反序列化 四、新的I/O(NIO) 表格总结 文件与目录操作 字符…

postman教程-19-mock测试

上一小节我们学习了Postman接口参数化方法,本小节我们讲解一下Postman mock测试的方法。 一、什么叫mock测试 mock测试就是在测试过程中,对某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便于测试的一种测试方法&#xff0c…

unity38——MemoryProfiler性能分析器,截帧分析当前性能占用率的具体文件

定义:性能分析器 (Unity Profiler) 是一种可以用来获取应用程序性能信息的工具。可以将性能分析器连接到网络中的设备或连接到已连接到计算机的设备,从而测试应用程序在目标发布平台上的运行情况。还可以在 Editor 中运行性能分析器,从而在开…

【elementui源码解析】如何实现自动渲染md文档-第二篇

目录 1.概要 2.引用文件 1)components.json 2)json-template/string 3)os.EOL 3.变量定义 4.模版填充 5.MAIN_TEMPLATE填充 6.src下的index.js文件 1)install 2)export 7.总结 所有章节: 【el…

【MongoDB 新搭档 Kafka】

对于做过数据处理,使用过消息队列的小伙伴 ,Kafka可以算是老朋友了,但是最近一个场景下,新的用法,让其变为了MongoDB的新搭档。 开始 从一个问题开始,熟悉MongoDB的小伙伴,可能使用过changeSt…

React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装

文章目录 前言Dialog公共弹窗组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局公共弹窗Dialog组件封装,将用到上篇封装的模态框Modal组件。有时在前台项目中,偶尔要用到一两个常用的组件,如 弹窗&#x…

safari浏览器无法连接到服务器

问题:MacBook pro,网络连接正常,可以使用各种软件上网,唯独safari浏览器打不开网页,报错说Safari无法连接到服务器; 原因:使用了VPN,VPN自动更改了网络设置,导致Safari浏…

Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)

Comparable 当我们要进行对象的比较的时候&#xff0c;我们是不能直接用>、< 这些符号直接进行比较的。 由于这是引用类型变量也是自定义类型变量&#xff0c;直接进行比较的时候&#xff0c;我们是通过对象的地址进行比较的&#xff0c;我们可以使用、! 进行两个对象的…

高考分数限制下,选好专业还是选好学校?

高考分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 高考作为每年一度的盛大考试&#xff0c;不仅关乎学生们的未来&#xff0c;更承载了家庭的期望。2004年高考刚刚结束&#xff0c;许多考生和家长已经开始为填报志愿而焦虑。选好学校和专业&#xff0c;直接关系到…

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

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

关于日用 Linux,大家或许关心的问题

简单讲完了我日常使用 Linux 的体验&#xff0c;我想大家也许对 Linux 有了那么一点点全新的认识。不过&#xff0c;作为操作系统「三巨头」&#xff08;Windows、macOS、Linux&#xff09;中&#xff0c;分量没那么高、技术要求却更高一些的成员&#xff0c;可能很多朋友对日常…

Ubuntu22.04之比较工具:Bcompare与Meld显示空格与tab(二百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

笔记99:OSQP 求解器示例代码

注1&#xff1a;以下代码是 OSQP 的官方文档提供的示例&#xff0c;我加上了详细的注释&#xff1b; 注2&#xff1a;OSQP 库仅支持C语言&#xff0c;不支持C&#xff0c;所以下面的示例代码使用的是C语言&#xff1b;但是 OSQP 求解库提供了针对C的接口 OSQP-EIGEN&#xff1…

图论之岛屿系列

图论之岛屿系列 形成模板进行学习&#xff0c;加快学习效率 深度优先遍历 # 可以直接改原始grid的采用直接改的方案来完成修改&#xff0c;减少了内存开支 def dfs(self, grid, i, j):if i < 0 or j < 0 or i > len(grid) or j > len(grid[0]) or grid[i][j] &…

百数私有化本地部署技术解析,附带独家优惠政策

数据驱动的时代&#xff0c;数据安全性对于每个企业来说都至关重要。私有化本地部署作为一种高效的数据管理方式&#xff0c;越来越受到企业的青睐。然而&#xff0c;高昂的部署费用常常让企业望而却步。 作为一家深耕办公领域10年的低代码公司&#xff0c;百数以本地化部署起…

Hi3861 OpenHarmony嵌入式应用入门--点灯

本篇实现对gpio的控制&#xff0c;通过控制输出进行gpio的点灯操作。 硬件 我们来操作IO2&#xff0c;控制绿色的灯。 软件 GPIO API API名称 说明 hi_u32 hi_gpio_deinit(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO…

群辉USB Copy套件的使用

目录 一、套件安装 二、插入USB设备 三、使用 四、故障排除 有了群辉NAS后,很多U盘、移动硬盘的数据需要备份到NAS中,这时就可以考虑使用USB Copy这个套件了。 USB Copy 乃是群晖上可用于和外接存储设备进行文件复制的一个工具,我常常借助它把外置存储设备的文件拷贝至…

Kafka集成flume

1.flume作为生产者集成Kafka kafka作为flume的sink&#xff0c;扮演消费者角色 1.1 flume配置文件 vim $kafka/jobs/flume-kafka.conf # agent a1.sources r1 a1.sinks k1 a1.channels c1 c2# Describe/configure the source a1.sources.r1.type TAILDIR #记录最后监控文件…