使用requests请求coches.net返回403响应,该如何解决?
爬虫返回403问题修复方案
核心代码疏漏
你已经定义了模拟浏览器的headers请求头,但调用requests.get()方法时没有传入该参数,请求默认使用requests自带的UA标识,会被网站反爬系统直接识别为爬虫拦截,这是触发403响应的最直接原因。
修正对应请求行即可:
# 原来的写法 # response = requests.get(url) # 修正后写法,传入headers,增加超时参数避免长时间挂起 response = requests.get(url, headers=headers, timeout=10)
额外优化建议(避免后续再次被拦截)
- 补充完整请求头:除了User-Agent,还可以新增
Accept、Accept-Language、Referer等字段,直接从浏览器开发者工具的网络面板复制该页面的真实请求头即可,和普通浏览器请求特征保持一致。 - 随机化请求间隔:将固定1秒的等待改为随机间隔,避免固定请求频率被反爬识别:
import random # 替换原来的time.sleep(1) time.sleep(random.uniform(1.5, 4)) - 维持会话状态:使用
requests.Session()发送请求,自动保存访问过程中产生的cookie,模拟真实用户的访问路径,先请求网站首页再爬取列表页,进一步降低被识别的概率。 - 控制爬取总量:不要短时间内批量爬取过多页面,避免触发站点的频率限制。
补充说明
coches.net没有完全禁止python脚本访问,只是你的请求特征不符合普通用户的行为规则,被反爬策略拦截了,按照上述方案调整后即可正常获取数据。爬取前建议先查看站点的robots.txt规则,避免违反站点的爬取约定。
内容的提问来源于stack exchange,提问作者markk borras
相关产品推荐
相关产品推荐

