网页抓取中的用户代理 101

在进行数据抓取任务时,使用正确的用户代理对于成功收集目标数据并避免被封禁至关重要。这是您入门所需的唯一指南。
3 min read
Chrome 浏览器和网络爬虫进行数据收集

在这篇文章中,你将学到:

  • 什么是用户代理?
  • 为什么需要使用用户代理?
  • 抓取网页时避免用户代理被封禁的技巧

什么是用户代理?

用户代理是指任何可以帮助最终用户与网页内容互动的软件。用户代理(UA)字符串是客户端计算机软件通过请求发送的文本。

用户代理字符串可以帮助目标服务器识别正在使用的浏览器、设备类型和操作系统。例如,这个字符串可以告诉服务器你正在使用 Chrome 浏览器和 Windows 10 系统。服务器可以根据这些信息调整响应以适应设备类型、操作系统和浏览器。

大多数浏览器以以下格式发送用户代理头,虽然选择用户代理的方式并不统一:

User-Agent: Mozilla/5.0 (system-information>)
<platform> (<platform-details>) <extensions>

每个浏览器都会添加自己的注释组件,如平台RV(发布版本)。Mozilla 提供了可用于爬虫的字符串示例:

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

你可以在他们的“>开发者网站上了解更多关于 Mozilla 浏览器的字符串信息。

下面是 Chrome 开发者网站上不同设备和浏览器的 UA 字符串格式示例:

Android 版 Chrome

手机 UA:

Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>)AppleWebKit/<WebKit Rev>
(KHTML, like Gecko) Chrome/<Chrome Rev>Mobile Safari/<WebKit Rev>

平板 UA:

Mozilla/5.0 (Linux; <Android Version>; <Build Tag etc.>)AppleWebKit/<WebKit Rev>
(KHTML, like Gecko) Chrome/<Chrome Rev>Safari/<WebKit Rev>

为什么需要使用用户代理?

当你在进行网页抓取时,有时会发现网页服务器会阻止某些用户代理。这通常是因为服务器识别出请求来自机器人,而某些网站不允许机器人爬虫或抓取器。更复杂的网站则采用相反的方式,即只允许被认为有效的用户代理执行抓取任务。真正复杂的网站甚至会验证浏览器行为是否与所声称的用户代理匹配。

你可能认为正确的解决方案是不在请求中包含用户代理。然而,这会导致工具使用默认 UA。通常情况下,目标网页服务器会将其列入黑名单并阻止请求。

那么如何确保你的用户代理不会被封禁呢?

避免抓取时 UA 被封禁的技巧:

#1: 使用真实的用户代理

如果你的用户代理不是来自主流浏览器,某些网站将会阻止其请求。许多基于机器人的网页抓取器会跳过定义 UA 这一步,结果由于缺少或错误的默认 UA 而被检测并封禁。

你可以通过为网页抓取器设置一个被广泛使用的 UA 来避免这个问题。你可以在这里找到大量流行的用户代理列表。你可以通过对网站执行cURL 请求来编译流行字符串列表并轮换它们。尽管如此,我们建议使用你的浏览器用户代理,因为如果你不频繁更改,浏览器的行为更可能符合用户代理的预期。

#2: 轮换用户代理

当你在进行大量请求时,应随机化它们。这将减少网页服务器识别并封禁你的 UA 的可能性。

如何随机化请求?

一种解决方案是通过使用轮换代理更改请求的 IP 地址。这样,你每次发送的请求都有不同的头信息。在网页服务器看来,似乎请求来自不同的计算机和浏览器。

专业提示:用户代理是一个头信息,但头信息不仅仅包括用户代理。你不能随意发送随机的头信息,你需要确保你发送的用户代理与你发送的其他头信息匹配。

如何检查和轮换用户代理

首先,你需要收集用户代理字符串列表。我们建议使用真实浏览器的字符串可以在这里找到。接下来的步骤是将字符串添加到 Python 列表中。最后,定义每个请求从列表中随机选择一个字符串。

你可以在这个Stack Overflow 讨论中看到如何使用 Python 3 和 Selenium 4 轮换用户代理的示例。代码示例如下:

# you will need to install Selenium and fake_useragent using pip or similar
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgentimport sleep

options = Options() options.add_argument(f'user-agent={UserAgent().random}')
driver = webdriver.Chrome(chrome_options=options) driver.get("http://www.whatsmyua.info/")

sleep(5)
driver.execute_cdp_cmd("Network.enable", {}) driver.execute_cdp_cmd("Network.setExtraHTTPHeaders", {"headers": {"User-Agent": f"{UserAgent().random}"}}) driver.get ("http://www.whatsmyua.info/")

无论你选择使用何种程序或方法来轮换你的 UA 头信息,你都应该遵循相同的技巧以避免被检测和封禁:

  • #1: 轮换与每个 UA 关联的一整套头信息
  • #2: 按照真实浏览器通常会发送的顺序发送头信息
  • #3: 使用你访问的前一个页面作为“引用者头信息”

专业提示:在使用引用者头信息时,你需要确保 IP 地址和 Cookie 不会改变。理想情况下,你实际上会访问前一个页面,以便在目标服务器上留下访问记录。

使用代理轮换用户代理

你可以通过使用轮换代理网络来避免手动定义列表和手动轮换 IP 的麻烦。代理具有设置自动 IP 轮换和 UA 字符串轮换的功能。这意味着你的请求看起来像是来自各种网页浏览器。这极大地减少了被封禁的可能性,并提高了成功率,因为请求看起来像是来自真实的网页用户。请记住,只有采用数据解锁技术的非常特定的代理才能够正确管理和轮换你的用户代理。

抓取用用户代理列表

有多种基于浏览器/手机/设备/机器人/搜索引擎/开发者工具的用户代理可用于在使用 wget 和 cURL 等工具时模拟各种浏览器。这些包括:

  • Lynx: Lynx/2.8.8pre.4 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/2.12.23
  • Wget: Wget/1.15 (linux-gnu)
  • Curl: curl/7.35.0
  • HTC: Mozilla/5.0 (Linux; Android 7.0; HTC 10 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Mobile Safari/537.36
  • Google Nexus: Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7
  • Samsung Galaxy Note 4: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-N910F Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
  • Samsung Galaxy Note 3: Mozilla/5.0 (Linux; Android 5.0; SAMSUNG SM-N900 Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/2.1 Chrome/34.0.1847.76 Mobile Safari/537.36
  • Samsung Phone: Mozilla/5.0 (Linux; Android 6.0.1; SAMSUNG SM-G570Y Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
  • Bing 的搜索引擎机器人: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • Google 的搜索引擎机器人: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Apple iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1
  • Apple iPad: Mozilla/5.0 (iPad; CPU OS 8_4_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12H321 Safari/600.1.4
  • Microsoft Internet Explorer 11 / IE 11: Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
  • Microsoft Internet Explorer 10 / IE 10: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; MDDCJS)
  • Microsoft Internet Explorer 9 / IE 9: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)
  • Microsoft Internet Explorer 8 / IE 8: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
  • Microsoft Internet Explorer 7 / IE 7: Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)
  • Microsoft Internet Explorer 6 / IE 6: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
  • Microsoft Edge: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
  • Mozilla Firefox: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0
  • Google Chrome: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

总结

由于大多数网站会阻止缺少有效或可识别浏览器用户代理的请求,学习如何正确轮换 UA 对于避免网站封禁至关重要。使用正确的用户代理可以告诉目标网站你的请求来自有效来源,使你可以自由地从目标网站上收集数据

Bright Data 开发了一种完全自动化的数据解锁解决方案,通过使用机器学习算法生成特定网站的浏览器用户代理并绕过机器人检测系统,为团队节省时间和资源。