1. 什么是UA(User‑Agent)

User‑Agent简称UA,是HTTP请求头里面的字段。服务器通过UA识别客户端是什么设备、浏览器、操作系统。

如果Python requests直接发起请求,默认UA是 python‑requests/版本号
网站识别到是爬虫客户端,直接返回403拒绝访问、返回假数据。
UA伪装就是把请求标识改成普通浏览器的身份。

查看本机请求UA测试地址:xxxxxxxxx

默认爬虫UA示例:

User‑Agent: python‑requests/2.31.0

浏览器真实UA示例(Chrome Windows)

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36

2. 静态写死UA(最简单用法)

安装依赖

pip install requests

代码示例

import requests

url = "xxxxxxxxx"

# 构造请求头,填入浏览器UA
headers = {
    "User‑Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
}

resp = requests.get(url, headers=headers, timeout=10)
print(resp.text)

输出结果可以看到User‑Agent已经变成Chrome浏览器标识,不再是python‑requests。

如何获取自己浏览器真实UA

  1. Chrome浏览器按F12打开开发者工具
  2. 切换到【网络】,刷新页面
  3. 随便点一条请求,右侧请求头找到User‑Agent,复制全部字符串即可。

3. Session会话全局设置UA

多次请求不需要每次都写headers,使用Session.headers.update()全局配置。

import requests

session = requests.Session()

# 统一设置UA,后续所有get/post自动携带
session.headers.update({
    "User‑Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
})

resp1 = session.get("xxxxxxxxx")
resp2 = session.get("xxxxxxxxx")

print(resp1.text)

4. UA池:随机切换User‑Agent(进阶)

固定同一个UA多次访问,部分网站依旧判定爬虫。维护UA列表,每次请求随机挑选一个UA,模拟多台浏览器访问。

import requests
import random

ua_list = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0"
]

headers = {
    "User‑Agent": random.choice(ua_list)
}

resp = requests.get("xxxxxxxxx", headers=headers)
print(resp.text)

循环爬取场景完整示例

import requests
import random
import time

ua_list = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"
]

for page in range(3):
    headers = {"User‑Agent": random.choice(ua_list)}
    resp = requests.get("xxxxxxxxx", headers=headers, timeout=10)
    print(f"第{page+1}次请求:{resp.json()['headers']['User‑Agent']}")
    time.sleep(1) # 请求间隔延时

5. 第三方库fake‑useragent自动生成UA

不用手动维护UA列表,库内置海量浏览器UA,自动随机生成。

安装

pip install fake‑useragent

示例代码

import requests
from fake_useragent import UserAgent

ua = UserAgent()
headers = {
    "User‑Agent": ua.random   # 随机获取浏览器UA
}

resp = requests.get("xxxxxxxxx", headers=headers)
print(headers["User‑Agent"])
print(resp.text)

离线环境小坑:第一次运行会联网下载UA数据,无网络会报错,可以本地缓存ua数据。

6. 常见踩坑点

  1. 符号复制错误:复制UA不要带多余换行、空格,会直接403访问拒绝。
  2. 只伪装UA不等于万能:仅仅修改UA,IP访问频率太高依旧被封,需要配合延时、代理IP、Cookie一起使用。
  3. 移动端网站:需要填入手机浏览器UA,而PC端UA。
  4. headers字典key严格区分大小写,必须写User‑Agent,不能随意简写。
  5. fake‑useragent库网络不好加载失败,可以捕获异常,回退使用内置静态UA。

fake‑useragent容错写法:

from fake_useragent import UserAgent

try:
    ua = UserAgent()
    my_ua = ua.random
except Exception:
    my_ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"

headers = {"User‑Agent": my_ua}
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐