当前位置: 首页 > news >正文

详细介绍:告别 403 Forbidden!详解爬虫如何模拟浏览器头部(User-Agent)

在爬虫开发中,“403 Forbidden” 绝对是最让人头疼的错误之一 —— 明明浏览器能正常打开网页,爬虫请求却被服务器无情拒绝。这背后,“浏览器头部信息” 尤其是 User-Agent,往往是关键突破口。今天我们就从原理到实践,彻底搞懂如何通过模拟 User-Agent 解决 403 问题,让爬虫顺利 “伪装” 成浏览器。

一、先搞懂:为什么 403 会盯上爬虫?

服务器之所以会返回 403,核心是 “识别出了访问者是爬虫而非正常用户”。而 User-Agent(用户代理),就是服务器判断身份的重要 “身份证”。

简单来说,User-Agent 是 HTTP 请求头部的一段字符串,用来告诉服务器 “我是谁”—— 比如你用 Chrome 浏览器访问网页,请求里的 User-Agent 会包含 “Chrome/120.0.0.0”“Windows NT 10.0” 等信息,服务器看到这段字符串,就知道是正常浏览器访问;但如果你的爬虫没设置 User-Agent,或者用了 Python requests 库默认的 “python-requests/2.31.0”,服务器一眼就能识破 “这是爬虫”,直接用 403 拒绝。

二、第一步:获取真实浏览器的 User-Agent

要模拟浏览器,首先得拿到 “正版” 的 User-Agent 字符串。这里有 3 种简单方法:

1. 浏览器开发者工具直接查(最准确)

以 Chrome 为例:

  • 打开任意网页,按 F12 打开开发者工具;
  • 切换到 “Network” 标签,刷新网页;
  • 在左侧请求列表中随便选一个请求(比如第一个文档请求),右侧找到 “Request Headers”;
  • 往下翻就能看到 “User-Agent” 字段,复制后面的字符串即可。

比如 Chrome 在 Windows 10 上的 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

2. 在线工具查询

如果嫌麻烦,直接搜 “User-Agent 查询”,比如访问useragentstring.com,网页会自动显示你当前浏览器的 User-Agent,直接复制即可。

3. 常用浏览器 User-Agent 模板(应急用)

如果暂时没法打开浏览器,也可以用这些通用模板(注意定期更新,浏览器版本会迭代):

  • Edge(Windows):Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edg/120.0.0.0 Safari/537.36
  • Safari(Mac):Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15
  • 手机 Chrome(Android):Mozilla/5.0 (Linux; Android 13; SM-G998U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36

三、第二步:在爬虫中配置 User-Agent(实战代码)

拿到真实 User-Agent 后,核心是在爬虫请求中 “带上” 它。这里以最常用的 Python requests 库为例,分基础版和进阶版讲解。

1. 基础版:固定 User-Agent(解决简单 403)

如果目标网站反爬不严格,固定一个真实 User-Agent 就能解决问题。代码示例:

python

import requests
# 1. 定义请求头部,把复制的User-Agent放进去
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"
}
# 2. 发起请求时带上headers参数
url = "https://目标网站地址"
try:response = requests.get(url, headers=headers)# 检查请求是否成功(200表示正常)if response.status_code == 200:print("请求成功!")print(response.text[:500])  # 打印前500个字符验证else:print(f"请求失败,状态码:{response.status_code}")
except Exception as e:print(f"报错:{e}")

这里的关键是requests.get()中加入headers=headers参数 —— 没有这一步,requests 会用默认的 “python-requests” User-Agent,大概率触发 403;加上后,服务器会认为是 Chrome 浏览器访问,从而放行。

2. 进阶版:User-Agent 池(应对严格反爬)

如果目标网站更严格,会检测 “单一 User-Agent 频繁访问”,这时候固定一个 User-Agent 还是会被封。解决方案是构建 “User-Agent 池”,每次请求随机选一个,模拟不同浏览器 / 设备的访问。

代码示例:

python

import requests
import random
# 1. 构建User-Agent池(多放几个不同浏览器/设备的)
user_agent_pool = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edg/120.0.0.0 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15","Mozilla/5.0 (Linux; Android 13; SM-G998U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36","Mozilla/5.0 (iPhone; CPU iPhone OS 17_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Mobile/15E148 Safari/604.1"
]
# 2. 每次请求随机选一个User-Agent
def get_random_headers():headers = {"User-Agent": random.choice(user_agent_pool),# 可选:加上Referer(告诉服务器请求来自哪个页面,更像真实访问)"Referer": "https://www.baidu.com/"  # 比如模拟从百度跳转过来}return headers
# 3. 发起请求
url = "https://目标网站地址"
for _ in range(5):  # 模拟多次请求,每次用不同User-Agentheaders = get_random_headers()response = requests.get(url, headers=headers)print(f"当前User-Agent:{headers['User-Agent'][:50]}...")print(f"状态码:{response.status_code}\n")

这里多了两个优化点:

  • random.choice()随机选 User-Agent,避免单一标识被盯上;
  • 增加了Referer字段 —— 有些服务器会检查 “请求来源”,比如只允许从百度、谷歌跳转的访问,加上 Referer 能进一步降低被识别的概率。

四、注意事项:避免踩坑的 3 个关键

  1. 不要用太旧的 User-Agent:比如 Chrome 80 以下的版本,服务器可能会认为是 “异常设备”,反而拒绝;建议定期更新 User-Agent 池,保持与主流浏览器版本一致。
  2. 不止 User-Agent:头部信息要完整:有些严格的网站会检查多个头部字段,比如Accept(告诉服务器能接收的内容格式)、Accept-Language(语言),可以从浏览器开发者工具里把这些字段一起复制到 headers 中,模拟更真实的请求。
  3. 配合其他反反爬手段:如果加了 User-Agent 还是 403,可能需要结合 “设置请求间隔”(用 time.sleep ())、“使用代理 IP” 等方法 ——User-Agent 是基础,但不是万能的。

五、总结

解决爬虫 403 Forbidden 问题,模拟 User-Agent 是最基础也最有效的第一步:通过获取真实浏览器的 User-Agent,在请求中带上它,甚至构建 User-Agent 池随机切换,就能让爬虫成功 “伪装” 成正常用户。

记住:爬虫的核心是 “模拟真实访问”,而 User-Agent 就是这层 “伪装” 的第一张身份证。掌握它,就能告别大部分基础级的 403 拒绝,让爬虫更顺畅地运行。

http://www.hskmm.com/?act=detail&tid=24492

相关文章:

  • 通过学习分位数函数提升预测准确性
  • 高中数列梳理
  • AtCoder Beginner Contest 426 实况记录 + A-D 题解
  • 提示词攻击如何防范(2025):从 Indirect Prompt Injection 到 RAG 供应链的分层防御实战
  • 【STM32项目开源】基于STM32的智能养殖场环境监测系统 - 详解
  • 前端学习教程-Axios
  • 『回忆录』返校前夜 230102
  • 断更
  • 前端学习教程-环境配置
  • TypeScript - Ref
  • 20251004 qmd 弱化规约(未完成)
  • 深入解析:人工智能专业术语详解(C)
  • 2025.10.4模拟赛
  • 黄金替罪羊
  • P5301 [GXOI/GZOI2019] 宝牌一大堆
  • 10.4 2025多校冲刺CSP模拟赛2 改题记录
  • 【比赛记录】2025CSP-S模拟赛58
  • 回忆有感
  • 框架高效的系统的演进如何塑造人工智能的深层语义分析能力
  • 『回忆录』高二上第一次月考——压力下的崛起,意料外的突破
  • AutoCAD 2025安装包下载 CAD免费下载 永久免费激活 附详细安装教程
  • 微分和积分的区别
  • 202509_QQ_secret
  • 4 对拍杂谈
  • Matlab R2024b下载及详细安装教程,附永久免费Matlab安装包
  • Luogu P1966
  • 题解:P14036 [PAIO 2025] Rooks
  • 2025/8/26
  • 27 考研初试时间大约是什么时候?
  • 数据结构 - 跳表 Skip List