
Ethan Collins
AI Agent Workflow Engineer
已发表 Mar 07, 2025
已更新 Mar 07, 2025 · 最小阅读量

在进行网页抓取时,使用错误的用户代理会导致立即被封锁。网站通常依靠用户代理来区分真实用户和机器人。为了避免被检测到,在您的网页抓取项目中使用格式正确且经常更新的用户代理至关重要。
本指南中,您将了解:
让我们开始吧!🚀
用户代理 (UA)是在HTTP请求标头中发送的一个字符串,用于识别浏览器、操作系统和其他详细信息。Web服务器使用此信息为用户的设备呈现适当的内容。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Mozilla/5.0 – 浏览器系列(Windows NT 10.0; Win64; x64) – 操作系统详细信息AppleWebKit/537.36 (KHTML, like Gecko) – 渲染引擎Chrome/123.0.0.0 – 浏览器版本Safari/537.36 – 兼容性框架通过修改用户代理,您可以使您的网页抓取器看起来像一个真实的浏览器,从而降低被检测到的风险。
大多数网站都会分析用户代理来过滤掉机器人流量。如果您的抓取器发送无效或过时的用户代理,它可能会立即被阻止。
通过使用适当的用户代理,您可以:
但是,重复使用同一个用户代理仍然可能触发反机器人系统。这就是为什么轮换用户代理至关重要的原因。
下面是用于网页抓取的精选列表:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Mozilla/5.0 (Macintosh; Intel Mac OS X 14.4; rv:124.0) Gecko/20100101 Firefox/124.0
Mozilla/5.0 (X11; Linux i686; rv:124.0) Gecko/20100101 Firefox/124.0
Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4.1 Safari/605.1.15
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.2420.81
💡 **提示:您可以访问WhatIsMyUserAgent**来检查您自己的用户代理。
许多网站都实现了机器人检测机制,这些机制会阻止缺少或不正确用户代理标头的请求。在本节中,让我们学习不同的方法来高效地设置和轮换用户代理。
requests库定义用户代理最简单的方法是使用流行的requests库修改请求的标头。
示例:设置静态用户代理
import requests
# 使用自定义User-Agent定义标头
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
# 使用自定义User-Agent发送请求
response = requests.get("https://httpbin.org/headers", headers=headers)
# 打印响应标头
print(response.text)
输出:
{
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
}
}
这确认了服务器正确接收并识别用户代理字符串。
重复使用单个用户代理会导致被封锁。为了避免这种情况,可以使用预定义列表轮换用户代理。
示例:使用random轮换用户代理
import requests
import random
# 不同的用户代理列表
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0"
]
# 选择一个随机的用户代理
headers = {"User-Agent": random.choice(user_agents)}
# 使用随机选择的用户代理发送请求
response = requests.get("https://httpbin.org/headers", headers=headers)
print(response.text)
通过轮换用户代理,您的抓取器看起来更像人类,并降低了被检测到的几率。
fake_useragent动态生成用户代理您可以使用fake_useragent库动态生成用户代理,而不是维护静态列表。
安装:
pip install fake-useragent
示例:生成随机用户代理
from fake_useragent import UserAgent
import requests
# 创建UserAgent对象
ua = UserAgent()
# 生成随机用户代理
headers = {"User-Agent": ua.random}
# 使用动态生成的 User-Agent 发送请求
response = requests.get("https://httpbin.org/headers", headers=headers)
print(response.text)
此方法提供了更多种类的用户代理,同时保持它们更新。
Selenium中设置自定义用户代理当使用Selenium进行网页抓取时,设置用户代理需要修改浏览器选项。
示例:在Chrome中设置用户代理
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置Chrome选项
chrome_options = Options()
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36")
# 使用自定义用户代理启动浏览器
driver = webdriver.Chrome(options=chrome_options)
# 打开测试页面以验证用户代理
driver.get("https://httpbin.org/headers")
# 提取并打印页面内容
print(driver.page_source)
driver.quit()
通过使用Selenium等浏览器自动化工具,您可以模拟真实用户的行为并绕过高级的反机器人措施。
要确保您的用户代理已正确设置,请使用以下方法:
https://httpbin.org/headers的响应标头示例:在循环中记录用户代理
import requests
import random
import time
# 用户代理列表
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0"
]
# 循环遍历请求
for i in range(5):
user_agent = random.choice(user_agents)
headers = {"User-Agent": user_agent}
response = requests.get("https://httpbin.org/headers", headers=headers)
print(f"Request {i+1} - User-Agent: {user_agent}")
time.sleep(2) # 添加延迟以避免速率限制
此脚本在多个请求中记录不同的用户代理,帮助您调试轮换策略。
与其使用单个静态用户代理,不如动态轮换它们以避免被检测到。以下是如何在Python中轮换用户代理:
import requests
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
]
headers = {"User-Agent": random.choice(user_agents)}
response = requests.get("https://httpbin.org/headers", headers=headers)
print(response.text)
此脚本从列表中随机选择一个用户代理,使您的抓取器更难以检测。
即使拥有最好的用户代理,网页抓取也需要其他技术才能保持不被检测:
即使使用用户代理和代理轮换以及所有这些技巧,网站仍然可能会实现高级的检测技术,例如指纹识别、JavaScript挑战和验证码验证。这就是CapSolver发挥作用的地方。
CapSolver 专注于解决验证码挑战,确保网页抓取不中断。通过集成 CapSolver,您可以自动解决验证码并保持抓取器平稳运行
索取顶级验证码解决方案的奖励代码 - CapSolver:CAPTCHA。兑换后,每次充值后您将获得额外 5% 的奖励,无限次
使用正确的用户代理是网页抓取中的一个关键步骤。在本指南中,我们介绍了:
✅ 用户代理是什么以及它是如何工作的
✅ 用于抓取的有效的用户代理列表
✅ 如何在Python中设置和轮换用户代理
✅ 避免被检测到的最佳实践
通过将用户代理轮换与其他反检测技术相结合,您可以成功地抓取数据而不会被封锁。
1. 网页抓取中的用户代理是什么?
用户代理是一个字符串,它将浏览器或客户端软件标识给 Web 服务器。在网页抓取中,它用于模拟真实用户的活动并避免被检测。
2. 用于个人用途的网页抓取是否非法?
用于个人用途的网页抓取通常是合法的,但您必须遵守网站的服务条款,并避免抓取敏感或受版权保护的数据。
3. 网页抓取中用户代理轮换的目的何在?
用户代理轮换有助于避免检测和阻止,使请求看起来来自不同的浏览器或设备。
4. 如何在网页抓取时避免被阻止?
为避免被阻止,请使用 IP 轮换、验证码解决、请求之间的延迟,并确保遵守站点的 robots.txt。
5. 网页抓取会影响网站的性能吗?
是的,过于频繁地抓取可能会使网站的服务器超载。务必以有限的请求负责任地抓取。

Ethan Collins
AI Agent Workflow Engineer
Building clearer handoffs between AI agents and tools.
关于作者