使用BeautifulSoup带Mozilla请求头爬取网站触发403 Forbidden错误如何解决
403 Forbidden报错原因及解决方法
问题成因
仅配置极简User-Agent无法绕过目标站点的反爬校验,当前站点存在多层反爬策略:
- 请求头校验规则严格,仅传UA会被识别为爬虫请求
- urllib库的默认请求特征明显,容易被站点反爬规则拦截
- 站点可能存在Cookie校验、请求频率校验等额外反爬逻辑
修复方案
- 补全完整的浏览器标准请求头,除UA外新增Accept、Accept-Language、Referer等常规字段,尽可能和真实浏览器的请求参数保持一致
- 使用
requests库替代urllib发送请求,自定义配置更灵活,默认请求特征更难被识别 - 单次请求前添加1-2秒的随机延迟,避免短时间高频请求触发IP限制
- 若仍无法访问,可手动访问目标站点后复制浏览器中的Cookie字段加入请求头,注意Cookie存在有效时长,过期后需要更新
可运行代码示例
import requests from bs4 import BeautifulSoup import time import random headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 'Referer': 'https://www.blade.com/', 'Connection': 'keep-alive' } target_url = "https://www.blade.com/news" # 添加随机延迟降低被识别概率 time.sleep(random.uniform(1, 2)) resp = requests.get(target_url, headers=headers) resp.encoding = 'utf-8' soup3 = BeautifulSoup(resp.text, 'lxml')
如果上述方案仍失效,可以使用无头浏览器(如Selenium、Playwright)模拟真实用户访问行为,绕开静态反爬规则。
内容的提问来源于stack exchange,提问作者Ian
相关产品推荐
相关产品推荐

