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

小白学大数据
• 阅读 46

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

  1. Python 中的 User-Agent 设置 在 Python 中,常用的 requests 库可以轻松设置 User-Agent。以下是一个示例代码: 在这个示例中,我们通过设置请求头中的 User-Agent 字段,伪装成谷歌浏览器发送请求。
    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)

2. Java 中的 User-Agent 设置
在 Java 中,可以使用 Jsoup 库来设置 User-Agent:
通过 Jsoup.connect(url).userAgent(userAgent).get() 方法,可以设置 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();
        }
    }
}
  1. Scala 中的 User-Agent 设置 在 Scala 中,可以使用 Dispatch 库来设置 User-Agent: 通过 addHeader 方法,可以设置 User-Agent 并发送请求。
    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) // 等待异步请求完成

}

三、高级技巧:模拟真实用户行为
1. 随机化请求间隔
真实用户在浏览网页时,操作之间会有随机的间隔。通过在操作之间添加随机延迟,可以模拟这种自然行为:
``` 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,可以使请求看起来来自不同的浏览器:
    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)


3. 模拟鼠标移动和点击
使用 Selenium 的 ActionChains 类,可以模拟鼠标的移动和点击:
``` 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. 输入文本时的延迟 模拟真实用户输入文本时的速度和节奏,可以通过逐个字符输入并添加延迟:
     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!')


四、注意事项
选择合适的 User-Agent:User-Agent 字符串应该模仿一个真实用户的浏览器。可以从浏览器开发者工具中复制 User-Agent 字符串。
更新 User-Agent:随着浏览器版本的更新,User-Agent 字符串也会变化。定期更新你的 User-Agent 字符串,以保持其真实性。
避免滥用:虽然设置 User-Agent 可以减少被识别为爬虫的风险,但过度请求仍然可能触发网站的反爬机制。合理设置请求频率和遵守网站的 robots.txt 规定是非常重要的。
尊重网站政策:在使用爬虫时,始终遵守目标网站的使用条款和隐私政策,不要进行任何可能侵犯版权或隐私的行为。
点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
2019 Python 面试 100 问,你会几道?
以下内容出自小程序「编程面试题库」!(https://oscimg.oschina.net/oscnet/c595326e367e4a0d9058fd7146873a74.jpg)0遇到过得反爬虫策略以及解决方法?1.通过headers反爬虫2.基于用户行为的发爬虫:(同一IP短
Stella981 Stella981
3年前
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定
可莉 可莉
3年前
2019 Python 面试 100 问,你会几道?
以下内容出自小程序「编程面试题库」!(https://oscimg.oschina.net/oscnet/c595326e367e4a0d9058fd7146873a74.jpg)0遇到过得反爬虫策略以及解决方法?1.通过headers反爬虫2.基于用户行为的发爬虫:(同一IP短
爬虫中无头浏览器如何选择
我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。而无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。主要是用作爬虫,用以捕捉Web上的各类数据;这里的无头主要是指没有界面,完全是后台操作。它就是一个真实的浏览器。只是这个浏览器是无界面的。在爬虫中使用无头浏览器有很多的注意事项,比如我们的业务场景是否适合使用无头浏
python爬取数据中的headers和代理IP问题
爬虫的主要爬取方式之一是聚焦爬虫,也就是说,爬取某一个特定网站或者具有特定内容的网站,而一般比较大的有价值的网站都会有反爬策略,其中常见的反爬策略是网站根据来访者的身份判定是否予以放行。对来访者身份的判定一般基于headers里的userAgent值,每一
Python中User-Agent的重要作用及实际应用
摘要:UserAgent是HTTP协议中的一个重要字段,用于标识发送请求的客户端信息。在Python中,UserAgent的作用至关重要,它可以影响网络请求的结果和服务器端的响应。将介绍UserAgent在Python中的重要作用,并结合实际案例展示其应用
小白学大数据 小白学大数据
7个月前
Java Selenium WebDriver:代理设置与图像捕获
在网络爬虫和自动化测试领域,SeleniumWebDriver是一个非常流行的工具,它允许开发者模拟用户在浏览器中的操作。然而,出于安全或隐私的考虑,有时我们需要通过代理服务器来发送请求。本文将介绍如何在Java环境中使用SeleniumWebDriver
小白学大数据 小白学大数据
4个月前
Python爬虫教程:Selenium可视化爬虫的快速入门
网络爬虫作为获取数据的一种手段,其重要性日益凸显。Python语言以其简洁明了的语法和强大的库支持,成为编写爬虫的首选语言之一。Selenium是一个用于Web应用程序测试的工具,它能够模拟用户在浏览器中的操作,非常适合用来开发可视化爬虫。本文将带你快速入
小白学大数据 小白学大数据
1个月前
Python爬虫:爱奇艺榜单数据的实时监控
实时监控榜单数据对于内容推荐、市场分析和用户行为研究至关重要。本文将介绍如何使用Python编写爬虫程序,以实时监控爱奇艺榜单数据,并提供相应的代码实现过程,包括如何在代码中添加代理信息以应对反爬虫机制。爬虫技术概述爬虫(WebCrawler),也称为网络
美凌格栋栋酱 美凌格栋栋酱
4星期前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
小白学大数据
小白学大数据
Lv1
男 · 亿牛云 · python技术
宁为代码类弯腰,不为bug点提交!
文章
95
粉丝
5
获赞
18