使用Python requests爬取Udemy课程数据时返回403错误如何解决?
403错误解决方法
第一步:修正编码与请求头问题
- 先处理乱码返回:你请求头里
accept-encoding包含了br(Brotli压缩)参数,requests默认不支持解析该格式,要么移除头里的br字段,要么执行pip install brotli安装对应依赖让requests可以正常解码响应内容。 - 补全必要安全头:Udemy的反爬会校验
sec-ch-ua、sec-fetch-site、sec-fetch-mode、sec-fetch-dest等浏览器专属字段,直接从浏览器开发者工具的Udemy请求记录里复制完整请求头使用,不要自行删减字段。
第二步:解决TLS指纹识别问题
requests默认的TLS握手指纹会被Udemy的WAF系统识别为爬虫,这也是你换了所有UA依然返回403的核心原因,可以改用curl_cffi库模拟真实浏览器的TLS特征,参考代码如下:
from curl_cffi import requests # 替换为你从浏览器复制的完整请求头 headers = { 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'accept-language': 'en-US,en;q=0.9,hi;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"Windows"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', } # impersonate参数对应你模拟的浏览器版本,和UA保持一致即可 response = requests.get('https://www.udemy.com/course/design-thinking-product-development', headers=headers, impersonate="chrome96") print(response.status_code) print(response.text)
第三步:补充优化方案
- 不要直接请求具体课程页,先请求Udemy首页获取官方下发的有效Cookie后,再发起课程页请求,符合正常用户的访问逻辑。
- 控制请求频率,避免短时间内大量请求触发频率限制,导致IP被拉黑。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

