爬取网站遇403 Forbidden错误,更换User-Agent仍未解决,求方案
这种情况我太有共鸣了——明明浏览器能正常打开目标页面,复制了完全一致的User-Agent,试了Session、直接请求各种方式还是被拦,大概率是网站的反爬机制校验了更多细节,绝不止看UA这么简单。给你几个具体的排查和解决方向:
补全完整的请求头字段
浏览器发送请求时,除了User-Agent,还会携带一堆关键头部信息(比如Accept、Accept-Language、Referer、Cookie、Accept-Encoding),很多网站会校验这些字段的完整性。你可以打开Chrome的Network面板,找到浏览器访问该页面的请求,右键选择「复制为cURL(bash)」,再把cURL转换成requests格式的请求头,把所有字段都补全后再试。模拟完整的会话流程
有些网站会验证你是否是从正常页面跳转而来,或者需要先获取首页的会话Cookie才能访问目标页面。你可以试试先用Session访问网站首页,再请求目标URL:import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Referer": "https://目标网站的首页URL/" } session = requests.Session() # 先访问首页获取会话Cookie session.get("https://目标网站的首页URL/", headers=headers) # 再请求目标URL req = session.get(URL, headers=headers) print(req.status_code)排查浏览器指纹校验
如果上面的方法都无效,可能网站用了更复杂的反爬手段,比如Canvas指纹、WebGL指纹,或者检测你是否使用真实浏览器。这时候可以试试用Selenium或Playwright模拟真实浏览器环境,它们会完整复现浏览器的行为(包括JS执行、指纹生成),大概率能绕过这类校验。检查IP是否被封禁
如果你之前频繁请求过该网站,你的IP可能已经被拉黑。可以试试切换网络(比如用手机热点),或者使用代理IP来请求,看是否能解决问题。控制请求频率
网站可能会根据请求频率判断是否为爬虫,你可以在请求之间加上随机延迟,比如time.sleep(random.uniform(1,3)),模拟人类的访问节奏。
内容的提问来源于stack exchange,提问作者DoesntEven




