Python爬虫请求返回403 Forbidden错误如何通过添加headers等方法解决
Python爬虫403 Forbidden报错解决方案
问题根因
403错误是目标网站识别到了requests默认的请求标识(默认User-Agent为python-requests/版本号格式),直接拦截了非浏览器发起的请求。
修复方案1:配置合法请求头
最核心的参数是User-Agent,用来模拟真实浏览器的身份标识,可直接使用以下可运行代码:
import requests import bs4 # 模拟Chrome浏览器的请求头,可根据自己实际使用的浏览器版本替换UA内容 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } res = requests.get('https://manga1001.com/日常-raw-free/', headers=headers) res.raise_for_status() print(res.text)
如果仅添加User-Agent仍被拦截,可补充以下常用请求头参数,进一步降低被识别的概率:
Accept:告知服务器客户端可接受的响应内容类型,示例取值:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Referer:标识请求的来源页面,此处可填目标网站首页:https://manga1001.com/Accept-Language:告知服务器客户端可接受的语言,示例取值:zh-CN,zh;q=0.9,ja;q=0.8,en;q=0.7
其他可行解决方法
如果配置完整请求头后仍被拦截,可尝试以下方案:
- 使用Selenium、Playwright等带浏览器内核的自动化工具,完全模拟真实用户的浏览器操作,普通反爬策略很难识别
- 配置代理IP池,避免同一IP短时间内请求次数过多被站点封禁
requests_html代码报错修复
r.html.render()方法本身无返回值,渲染后的页面内容仍存储在r.html对象中,修改后的可运行代码如下:
from requests_html import HTMLSession url = "https://search.yahoo.co.jp/realtime" session = HTMLSession() r = session.get(url) # 执行页面渲染,首次运行会自动下载对应版本的Chromium内核 r.html.render() # 打印渲染完成后的页面源码 print(r.html.html) session.close()
如果仍报错,大概率是运行环境缺少Chromium相关依赖,可更换为适配性更强的Playwright工具实现动态页面渲染。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

