杰瑞科技汇

Python如何修改User-Agent?

在 Python 中修改 User-Agent 是一个非常常见的需求,尤其是在进行网络爬虫、API 请求或需要模拟不同浏览器行为时,User-Agent 是一个 HTTP 请求头,它告诉服务器发起请求的客户端(如浏览器、爬虫)的类型、操作系统和版本。

Python如何修改User-Agent?-图1
(图片来源网络,侵删)

下面我将为你介绍几种主流且有效的方法,从简单到复杂,并附上代码示例。

使用 requests 库(最常用)

requests 是 Python 中最流行的 HTTP 库,修改 User-Agent 非常简单,你只需要在请求头(headers)中传入一个自定义的 User-Agent 字符串即可。

直接指定一个 User-Agent 字符串

这是最直接的方式,你可以从一个网站上获取一个常见的 User-Agent 字符串。

import requests
# 目标网址
url = 'http://httpbin.org/user-agent' # httpbin.org 会返回你请求的 User-Agent
# 1. 直接定义一个 User-Agent 字符串
# 这是一个常见的 Chrome 浏览器 User-Agent (Windows 11)
my_user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
# 2. 将 User-Agent 放入 headers 字典中
headers = {
    'User-Agent': my_user_agent
}
# 3. 发送请求,并传入 headers
try:
    response = requests.get(url, headers=headers)
    response.raise_for_status()  # 如果请求失败 (状态码非 200), 则抛出异常
    # 打印返回的 User-Agent,验证是否成功修改
    print("请求成功!")
    print("服务器返回的 User-Agent 是:")
    print(response.json()) # httpbin.org 返回的是 JSON 格式
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

使用 fake_useragent 库动态生成 User-Agent

为了避免使用固定的 User-Agent 被网站识别为爬虫,最好的方法是动态生成随机的、真实的 User-Agent。fake_useragent 库就是为此而生的。

Python如何修改User-Agent?-图2
(图片来源网络,侵删)

你需要安装这个库:

pip install fake_useragent

在代码中使用它:

import requests
from fake_useragent import UserAgent
# 目标网址
url = 'http://httpbin.org/user-agent'
# 1. 创建 UserAgent 对象
ua = UserAgent()
# 2. 随机获取一个 Chrome 浏览器的 User-Agent
# 你也可以选择 'firefox', 'safari', 'edge' 等
# my_user_agent = ua.chrome
# 或者随机获取一个
my_user_agent = ua.random
# 3. 将 User-Agent 放入 headers 字典中
headers = {
    'User-Agent': my_user_agent
}
print(f"本次使用的 User-Agent: {my_user_agent}")
# 4. 发送请求
try:
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    print("\n请求成功!")
    print("服务器返回的 User-Agent 是:")
    print(response.json())
except requests.exceptions.RequestException as e:
    print(f"请求失败: {e}")

fake_useragent 的优点:

  • 随机性:每次运行脚本都会得到不同的 User-Agent,大大降低了被封禁的风险。
  • 真实性:库中包含了大量从真实浏览器中收集的 User-Agent 字符串,非常逼真。
  • 易用性:API 简单,一行代码即可获取。

使用 urllib 库(Python 内置)

urllib 是 Python 的标准库,无需安装,它的用法比 requests 稍显繁琐。

Python如何修改User-Agent?-图3
(图片来源网络,侵删)
import urllib.request
import urllib.parse
# 目标网址
url = 'http://httpbin.org/user-agent'
# 1. 定义 User-Agent
my_user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
# 2. 创建一个 Request 对象,并添加 headers
req = urllib.request.Request(url)
req.add_header('User-Agent', my_user_agent)
# 3. 发送请求并获取响应
try:
    with urllib.request.urlopen(req) as response:
        # 读取响应内容
        html = response.read().decode('utf-8')
        print("请求成功!")
        print("服务器返回的 User-Agent 是:")
        print(html)
except urllib.error.URLError as e:
    print(f"请求失败: {e}")

使用 selenium 库(模拟浏览器)

selenium 通常用于自动化测试网页,但它也能非常完美地模拟真实浏览器,包括修改 User-Agent,这种方法适用于那些对 JavaScript 渲染有要求或者反爬虫机制非常强的网站。

你需要安装 selenium 和对应浏览器的 WebDriver(如 ChromeDriver)。

pip install selenium

然后需要下载与你的 Chrome 浏览器版本匹配的 ChromeDriver 并配置到系统路径。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 目标网址
url = 'http://httpbin.org/user-agent'
# 1. 创建 Chrome 选项对象
chrome_options = Options()
# 2. 设置 User-Agent
# 注意:这里的 User-Agent 字符串不要加引号
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
chrome_options.add_argument(f'user-agent={user_agent}')
# 可选:以无头模式运行(不显示浏览器窗口)
# chrome_options.add_argument('--headless')
# 3. 初始化 WebDriver
# 确保你的 chromedriver 在系统路径中,或者指定其路径
# driver = webdriver.Chrome(options=chrome_options)
# chromedriver 没有在 PATH 中,需要指定路径
# driver_path = '/path/to/your/chromedriver'
# driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)
driver = webdriver.Chrome(options=chrome_options)
try:
    # 4. 打开网页
    driver.get(url)
    # 等待一下,确保页面加载完成
    time.sleep(2)
    # 5. 获取页面源代码并解析
    # httpbin.org 会将 User-Agent 放在 <pre> 标签内
    page_source = driver.page_source
    print("请求成功!")
    print("页面源码中的 User-Agent 部分:")
    # 简单提取一下,实际项目中可以用更复杂的解析方法
    start = page_source.find('<pre>') + len('<pre>')
    end = page_source.find('</pre>')
    print(page_source[start:end])
finally:
    # 6. 关闭浏览器
    driver.quit()

总结与推荐

方法 优点 缺点 适用场景
requests + 固定 UA 简单、快速 UA 固定,易被封 简单的 API 请求,对反爬要求不高的网站
requests + fake_useragent 强烈推荐、随机、真实、高效 需要额外安装一个库 绝大多数网络爬虫和自动化脚本
urllib Python 内置,无需安装 代码繁琐,功能比 requests 不想安装第三方库,或者在一些受限环境中
selenium 完美模拟真实浏览器,可执行 JS 速度慢,资源消耗大,配置复杂 需要渲染 JS 的网站,反爬极其严格的网站

给你的建议:

  • 对于 90% 的情况,直接使用 requests + fake_useragent 是最佳选择,它简单、高效且能有效规避大部分反爬机制。
  • 如果你的请求非常简单,且只调用一两次,用 requests + 固定 UA 也可以。
  • 如果网站需要你登录后操作,或者有复杂的交互,并且对 User-Agent 检查不严,requests 仍然是首选。
  • 只有当网站会检测你是否是 webdriver,或者页面内容通过 JavaScript 动态加载时,才考虑使用 selenium
分享:
扫描分享到社交APP
上一篇
下一篇