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

news/2025/10/4 22:29:50/文章来源:https://www.cnblogs.com/lxjshuju/p/19126013

在爬虫开发中,“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.mzph.cn/news/927624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程建设造价全过程监督网站中国新冠疫苗接种率

最大矩形 难度:困难 题目描述 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例1 输入:matrix [["1","0","1","0",&qu…

Redis Zset的底层秘密:跳表(Skip List)的精妙设计 - 详解

Redis Zset的底层秘密:跳表(Skip List)的精妙设计 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

网站开发部职责搜款网站一起做网店

我们通过将近半天的搜索数据,查到了美国五大湖中优势物种的食物网数据,以Eric伊利湖为例,共包含34各优势物种,相互之间的关系如下图所示: 一、题目 (一) 赛题原文 2024 MCM Problem A: Reso…

实用指南:TCP连接关闭的“礼貌告别“与“果断离场“:深入解析Linger选项

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

郑州做网站和推广哪家好wordpress 顶部栏

文章目录 ISO文件格式光盘的基本概念光盘种类特点DVDR光盘使用windows调用Linux调用Linux平台下用到的C库:读取设备驱动列表向光驱中写文件 数字存储媒体快速发展的今天,光驱的使用已经不像以前那样普及了。但是在数据备份、安装软件和操作系统、旧设备兼容等领域还…

虚拟商品购物网站源码网站设计参考网址

Nginx是一个高性能的web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 (1)更快 这表现在两个方面:一方面,在正常情况下&…

网站的字体做多大企业管理咨询类公司

本文实例讲述了Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法。分享给大家供大家参考,具体如下:前言:laravel创建数据库,实际可以手动创建,如古老的phpmyadmin 等均可以。一、数据库连接&#xff1a…

深入解析:从 CefSharp 迁移至 DotNetBrowser

深入解析:从 CefSharp 迁移至 DotNetBrowser2025-10-04 22:18 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

为什么很多地级市、县级市都把高铁站盖到了郊区呢 —— 以鞍山西站、海城西站为例

为什么很多地级市、县级市都把高铁站盖到了郊区呢 —— 以鞍山西站、海城西站为例每次假期都是要从高铁西站下车,每每如此总是免不得抱怨,毕竟这个郊区的西站无形之中就把回家的距离拉远了快30公里,如果短途做高铁,…

AtCoder Beginner Contest 426 实况记录 + A-D 题解

省流:只有 \(1000\) 分,遗憾离场。 这篇文章用来警示大家不要在比赛中犯相同的错误。 A. OS Versions AI 出来解释一下 \(\texttt{newer than}\) 翻译成“更新”何意味?请判断版本 \(X\) 与版本 \(Y\) 是否相同或更…

提示词攻击如何防范(2025):从 Indirect Prompt Injection 到 RAG 供应链的分层防御实战

2025 年 LLM 首要风险仍是 Prompt Injection / 间接提示词注入(Indirect Prompt Injection, IPI),RAG 供应链与外部工具风险 针对主要AI应用的暴露面。 需要对齐OWASP LLM01 / MITRE ATLAS / NIST AI RMF,并提供 *…

但行好事,莫问前程

但行好事,莫问前程又是一次忘了在第一天前写的考试。 这一个月经历了太多的跌宕起伏:从上一次考试的惊喜,到渐渐出现问题,再到逐渐回归正常的学习,最后在第二次考试之前又出现了大问题。具体问题是什么不好说。 我…

【STM32项目开源】基于STM32的智能养殖场环境监测系统 - 详解

【STM32项目开源】基于STM32的智能养殖场环境监测系统 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

wordpress地址为灰色免费智能seo收录工具

集成联调交付(Integrated Joint Debugging and Delivery)是软件开发过程中的一个阶段,主要涉及将不同的软件模块或组件整合在一起,并进行联合调试和测试,以确保它们能够作为一个整体正常工作。这个过程通常发生在开发周…

前端学习教程-Axios

Axios 是一个基于 Promise 的流行的 HTTP 客户端,用于浏览器和 Node.js 环境,支持 Promise API、拦截请求和响应、转换请求数据和响应数据等功能。 一、安装 Axios使用 npm 或 yarn 安装(适用于 Vue/React 等项目)…

镇江网站开发图片摄影网站

在2018杭州云栖大会的主论坛上,阿里云技术研发总经理蒋江伟发表了《飞天2.0,万物智能的基础服务》的主题演讲,从全连接、安全、简便、高速四个方面,阐述了飞天2.0网络的新特性。 蒋江伟表示,万物智能时代产生的海量数据…

网站域名怎么做杰恩设计网站是谁做的

JVM 案例 案例一:服务器内存不足,影响Java应用 问题: 收到报警,某Java应用集群中一台服务器可用内存不足,超过报警阈值。 排查过程: 首先,通过Hickwall查看该应用各项指标,发现无论…

网站是怎样制作的自媒体135手机版

电商技术揭秘相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五&#xf…

网站开发分包网站开发运营工程师待遇

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、默认成员函数二、构造函数构造函数的概念及特性 三、析构函数析构函数的特性…

网站如何交换链接临淄房产信息网123

文章目录 一、区别二、编写loader三、编写plugin参考文献 一、区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终…