使用 User-Agent 模拟浏览器行为的技巧

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 使用 User-Agent 模拟浏览器行为的技巧

在现代网络爬虫和自动化测试中,模拟浏览器行为是一个至关重要的技术。通过模拟浏览器行为,爬虫可以伪装成真实用户,从而绕过网站的反爬虫机制,获取所需的数据。而 User-Agent 是实现这一目标的关键技术之一。
一、User-Agent 的作用
User-Agent 是 HTTP 请求头中的一个重要字段,用于标识发起请求的客户端信息,包括浏览器类型、版本、操作系统等。服务器通过 User-Agent 可以判断请求是否来自真实用户,从而提供针对性的内容和服务。在爬虫中,通过设置合适的 User-Agent,可以模拟不同浏览器的行为,避免被网站识别为爬虫。
二、如何设置 User-Agent

  1. Python 中的 User-Agent 设置
    在 Python 中,常用的 requests 库可以轻松设置 User-Agent。以下是一个示例代码:
    import requests
    from requests.auth import HTTPProxyAuth

目标 URL

url = 'https://www.example.com'

设置 User-Agent

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

设置代理服务器

proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"

proxies = {
"http": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}",
"https": f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"
}

发送请求

response = requests.get(url, headers=headers, proxies=proxies, auth=HTTPProxyAuth(proxyUser, proxyPass))

打印响应内容

print(response.text)
在这个示例中,我们通过设置请求头中的 User-Agent 字段,伪装成谷歌浏览器发送请求。

  1. Java 中的 User-Agent 设置
    在 Java 中,可以使用 Jsoup 库来设置 User-Agent:
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import java.net.Authenticator;
    import java.net.PasswordAuthentication;
    import java.net.Proxy;

public class Main {
public static void main(String[] args) {
String url = "https://www.example.com";

    // 设置 User-Agent
    String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3";

    // 设置代理服务器
    String proxyHost = "www.16yun.cn";
    int proxyPort = 5445;
    String proxyUser = "16QMSOML";
    String proxyPass = "280651";

    // 配置代理认证
    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(proxyUser, proxyPass.toCharArray());
        }
    });

    // 创建代理服务器
    Proxy proxy = new Proxy(Proxy.Type.HTTP, new java.net.InetSocketAddress(proxyHost, proxyPort));

    try {
        // 发送请求
        Document doc = Jsoup.connect(url)
                .proxy(proxyHost, proxyPort)
                .userAgent(userAgent)
                .get();

        // 打印响应内容
        System.out.println(doc.title());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

}
通过 Jsoup.connect(url).userAgent(userAgent).get() 方法,可以设置 User-Agent 并获取网页内容。

  1. Scala 中的 User-Agent 设置
    在 Scala 中,可以使用 Dispatch 库来设置 User-Agent:
    import dispatch._
    import scala.concurrent.ExecutionContext.Implicits.global
    import scala.concurrent.Future

object UserAgentExample extends App {
val url = "https://www.example.com"

// 设置 User-Agent
val userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"

// 设置代理服务器
val proxyHost = "www.16yun.cn"
val proxyPort = 5445
val proxyUser = "16QMSOML"
val proxyPass = "280651"

// 创建代理服务器
val proxy = new java.net.InetSocketAddress(proxyHost, proxyPort)
val httpProxy = new java.net.Proxy(java.net.Proxy.Type.HTTP, proxy)

// 配置代理认证
java.net.Authenticator.setDefault(new java.net.Authenticator() {
    override def getPasswordAuthentication(): java.net.PasswordAuthentication = {
        new java.net.PasswordAuthentication(proxyUser, proxyPass.toCharArray)
    }
})

// 发送请求
val req = url(url).addHeader("User-Agent", userAgent)
val response: Future[String] = Http.default(req OK as.String)

response.onSuccess {
    case str => println(str)
}

Thread.sleep(5000) // 等待异步请求完成

}
通过 addHeader 方法,可以设置 User-Agent 并发送请求。
三、高级技巧:模拟真实用户行为

  1. 随机化请求间隔
    真实用户在浏览网页时,操作之间会有随机的间隔。通过在操作之间添加随机延迟,可以模拟这种自然行为:
    Python复制
    import time
    import random

def random_sleep(min_seconds=1, max_seconds=3):
time.sleep(random.uniform(min_seconds, max_seconds))

示例:在两个操作之间添加随机延迟

random_sleep()
driver.get('https://www.example.com')
random_sleep()
driver.find_element_by_id('some-button').click()

  1. 使用随机的 User-Agent
    通过设置随机的 User-Agent,可以使请求看起来来自不同的浏览器:
    Python复制
    from selenium import webdriver
    import random

user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15",

# 更多 User-Agent 字符串...

]

random_user_agent = random.choice(user_agents)
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={random_user_agent}')
driver = webdriver.Chrome(options=options)

  1. 模拟鼠标移动和点击
    使用 Selenium 的 ActionChains 类,可以模拟鼠标的移动和点击:
    Python复制
    from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_id('some-button')
action = ActionChains(driver)
action.move_to_element(element).click().perform()

  1. 输入文本时的延迟
    模拟真实用户输入文本时的速度和节奏,可以通过逐个字符输入并添加延迟:
    Python复制
    def type_randomly(input_element, text):
    for char in text:
     input_element.send_keys(char)
     time.sleep(random.uniform(0.1, 0.5))  # 随机延迟模拟打字速度
    

input_field = driver.find_element_by_id('input-field-id')
type_randomly(input_field, 'Hello, World!')
四、注意事项

  1. 选择合适的 User-Agent:User-Agent 字符串应该模仿一个真实用户的浏览器。可以从浏览器开发者工具中复制 User-Agent 字符串。
  2. 更新 User-Agent:随着浏览器版本的更新,User-Agent 字符串也会变化。定期更新你的 User-Agent 字符串,以保持其真实性。
  3. 避免滥用:虽然设置 User-Agent 可以减少被识别为爬虫的风险,但过度请求仍然可能触发网站的反爬机制。合理设置请求频率和遵守网站的 robots.txt 规定是非常重要的。
  4. 尊重网站政策:在使用爬虫时,始终遵守目标网站的使用条款和隐私政策,不要进行任何可能侵犯版权或隐私的行为。
相关文章
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
8天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
2850 112
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
3天前
|
云安全 边缘计算 人工智能
对话|ESA如何助力企业高效安全开展在线业务?
ESA如何助力企业安全开展在线业务
1024 8
|
7天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1546 9
阿里云PAI部署DeepSeek及调用
|
6天前
|
人工智能 自然语言处理 JavaScript
宜搭上新,DeepSeek 插件来了!
钉钉宜搭近日上线了DeepSeek插件,无需编写复杂代码,普通用户也能轻松调用强大的AI大模型能力。安装后,平台新增「AI生成」组件,支持创意内容生成、JS代码编译、工作汇报等场景,大幅提升工作效率。快来体验这一高效智能的办公方式吧!
1429 6
|
3天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
15天前
|
Linux iOS开发 MacOS
deepseek部署的详细步骤和方法,基于Ollama获取顶级推理能力!
DeepSeek基于Ollama部署教程,助你免费获取顶级推理能力。首先访问ollama.com下载并安装适用于macOS、Linux或Windows的Ollama版本。运行Ollama后,在官网搜索“deepseek”,选择适合你电脑配置的模型大小(如1.5b、7b等)。通过终端命令(如ollama run deepseek-r1:1.5b)启动模型,等待下载完成即可开始使用。退出模型时输入/bye。详细步骤如下图所示,轻松打造你的最强大脑。
9589 86
|
1月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171380 18
|
7天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。
|
4天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。