7 User-Agent 验证之 User-Agent 轮换

在进行网络爬虫时,User-Agent 是一个关键的请求头,它告诉服务器关于客户端浏览器的信息。服务器可以根据这个信息来决定如何响应请求。为了防止恶意爬虫,很多网站会实施 User-Agent 验证策略,检测是否存在异常访问行为。因此,进行 User-Agent 轮换是一种常见的反爬策略。

什么是 User-Agent 轮换?

User-Agent 轮换,顾名思义,就是在发送请求时随机选择一个 User-Agent 字符串,从而模拟真实用户的行为,减少被网站识别为爬虫的风险。通常情况下,一个爬虫在持续访问同一个网站时,如果反复使用相同的 User-Agent,就很容易被网站检测到并屏蔽。

轮换的必要性

考虑以下情况:

  • 当你使用一个静态的 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),频繁调用同一网页,会增加被限制的风险。
  • 相比于总是使用相同的 User-Agent,情境如真实用户频繁切换浏览器、设备、操作系统等,有助于减少被网站监测到的概率。

如何实现 User-Agent 轮换?

实现 User-Agent 轮换有多种方法,以下是一些常见的方法:

1. 使用 User-Agent 列表

可以预先准备一个 User-Agent 列表,然后在发起请求时随机选取一个进行使用。这是简单且有效的轮换方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import random
import requests

# 准备一个 User-Agent 列表
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/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36",
]

# 随机选择 User-Agent
user_agent = random.choice(user_agents)

# 使用 requests 发送请求
headers = {
"User-Agent": user_agent
}

response = requests.get("https://example.com", headers=headers)
print(response.text)

2. 结合代理池

通常,结合使用 User-Agent 轮换和代理池可以有效降低被封禁的风险。代理池可以提供更改 IP 地址的能力,而 User-Agent 轮换则提供了不同的身份标识。

这里是一个简单的代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from itertools import cycle
import requests

# 代理池
proxies = ['http://proxy1:port', 'http://proxy2:port', 'http://proxy3:port']
proxy_pool = cycle(proxies)

# User-Agent 列表
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/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
]

# 测试轮换 User-Agent 和代理
for _ in range(5):
user_agent = random.choice(user_agents)
proxy = next(proxy_pool)

headers = {
"User-Agent": user_agent
}

response = requests.get("https://example.com", headers=headers, proxies={"http": proxy})
print(response.status_code)

3. 集成到爬虫系统中

在设计复杂的爬虫系统时,可以将 User-Agent 轮换的逻辑集成到爬虫框架中,使得它自动选择和变换 User-Agent

案例分析

假设你正在构建一个爬虫,目标是定期从某个新闻网站获取最新的头条新闻。如果频繁使用同一个 User-Agent,你可能会遭遇访问限制。

通过使用上述 User-Agent 轮换策略以及代理池,你可以成功地获取最新的新闻,而不被服务器检测到。

总结

User-Agent 轮换是网络爬虫中一种简单而有效的防护措施。当你构建爬虫时,应当结合使用多个 User-Agent 和代理,保持请求的多样性,以提高成功率,并降低被封禁的风险。在接下来的章节中,我们将探讨一些常见的 User-Agent 列表,以进一步丰富我们的爬虫项目。

7 User-Agent 验证之 User-Agent 轮换

https://zglg.work/crawler-attack/7/

作者

AI免费学习网(郭震)

发布于

2024-08-11

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论