什么是用户代理?头部、浏览器和机器人身份

什么是用户代理?

Scrapeless Agent Browser 提供带有可选的 User-Agent 字符串配置和其他支持的浏览器设置的云浏览器会话。

用户代理是代表用户执行操作的客户端软件,例如浏览器或自动化 HTTP 客户端。User-Agent 头是一个请求字段,用于描述该客户端。人们经常使用“用户代理”来指代头字符串,但软件及其自我描述是不同的东西。

这种区别在网页抓取中很重要。更改头部意味着更改客户端的声明。这并不替代呈现引擎、重置会话或证明谁发送了请求。将字符串视为文档化客户端环境的一部分。

摘要

  • 用户代理是客户端软件。 浏览器和自动化客户端都可以作为用户代理。
  • User-Agent 头是自我描述。 服务器不能仅凭字符串作为身份的证明。
  • 浏览器检测有其局限性。 功能支持应尽可能直接测试。
  • 一致的环境使观察更容易比较。 记录相关的浏览器、语言和地区设置与收集的数据。

客户端及其 User-Agent 头

用户代理代表用户发送请求并消费响应。浏览器可以显示文档并运行页面脚本,而更简单的客户端可能只能检索响应字节。即使它们提供不同的功能,二者仍然是客户端。

该 HTTP 用户代理定义 提供了基本的区别。User-Agent 字段可以携带产品标识符和描述发送软件的评论。网站可能使用该信息进行记录或兼容性处理,但该字段由客户端提供。

有用的调试记录将实际客户端与它发送的字符串分开。如果脚本报告自己为桌面浏览器但从不运行 JavaScript,目标仍然可以收到看似浏览器的头部与仅限 HTTP 的交互。这个差异可能解释了为什么在交互式浏览器中的页面视图成功,而解析器却仅仅看到初始标记。

通过询问哪个客户端执行了请求、它发送了哪个头部以及哪个表示返回的开始诊断。这个顺序比从一个长用户代理列表中随机选择一个字符串更具信息量。

如何读取浏览器用户代理字符串

浏览器用户代理字符串通常包含几个产品和兼容性标记,而不是一个简洁的浏览器名称。历史兼容性惯例意味着现代字符串可以提到不识别其实际浏览器家族的名称。

该 User-Agent 头语法和示例 展示了为什么天真的子字符串匹配是不可靠的。一个标记可以因为网站曾经期望它而保留在字符串中。将每个标记视为一个单独安装的组件会得出不正确的结论。

对于例行分析,保留原始字符串并单独记录解析的浏览器家族。如果使用解析器,保留其版本或规则集,以便可以解释后续更改。解析器更新后出现变化的仪表盘计数可能描述的是分类变化,而不是访客变化。

不要收集超出任务需求的客户端细节。呈现调查可能需要浏览器家族和平台类别。简单的正常运行检查可能只需要您自己的监控客户端的名称。保持目的狭窄可以减少不必要的身份收集。

头部、JavaScript 和客户端提示

浏览器身份可以通过请求头和页面侧 API 显示,这些表面并不能形成可信的身份证书。页面脚本可以读取 navigator.userAgent, 而服务器看到请求头。浏览器提供的客户端提示提供了另一种表面,支持的内容。

该 navigator.userAgent 属性 有明确的可靠性限制。浏览器可能会减少所报告字符串中的细节,并且字符串可以被更改。仅基于声称的版本做出的功能决策可以因此错误分类客户端。

对于网站实现,最好检查所需功能是否存在,而不是根据名称预测支持。对于数据收集,记录您实际创建的环境并检查其生成的内容。声称的移动设备并不能保证移动视口;更改头部并不改变每个呈现特征。

保持差异可观察。如果目标返回不同的布局,保存足够的页面证据以识别变化。避免猜测不匹配是来自 User-Agent 字段时,语言、cookies、地理位置或实验都可能解释这一点。

为什么网站对客户的响应不同

网站可以根据客户信息改变其内容,但用户代理的变异仅是可能的原因之一。一些网站提供兼容性标记、设备导向的导航或对识别的爬虫进行特殊处理。其他网站使用响应式 CSS 来处理相同文档。

假设一个公共目录在桌面和移动布局中显示不同的菜单。一个针对桌面菜单的选择器即使在头部保持不变时,在狭窄的视口中也可能失败。在替换选择器或改变客户端身份之前,请检查呈现的文档和实际的屏幕条件。

受控比较每次只改变一个相关条件。尽可能保持 URL、账户状态、语言、地区和收集目的固定。然后比较返回的页面身份和所需字段。这种方法使得差异可归因,而不是将多个配置更改混合在一个操作中。

对于服务器端观察,保留最终的 URL 和响应类型。重定向到登录页面可能看起来像是意外的用户代理响应,如果您的管道仅记录状态的话。内容本身是交付的体验的证据。

用户代理和爬虫会话一致性

抓取会话需要一个连贯的环境,因为相关请求可能依赖于先前建立的状态。在流程中间更改头部可能会增加变异,使得收集错误更难以解释。

选择适合授权任务的客户端配置,然后保持其在该任务中的稳定性。故意记录更改。如果您正在评估桌面和移动视图,请使用单独的上下文和明确的标签为每个观察结果进行标记,而不是在相同的浏览序列中交替描述。

当工作流需要渲染内容时, 无痕代理浏览器 提供浏览器执行层。它是可选的 浏览器指纹配置 包括一个用户代理设置。支持的选项和限制应指导配置;自定义字符串不应被视为对每个浏览器属性随之更改的承诺。

相关 浏览器指纹定制 文章提供了额外的背景信息。保持当前文档作为参数行为的权威,特别是在较旧的文章描述的功能比当前接口更广泛的地方。

客户身份信号的比较

不同的客户端信号描述了请求或浏览环境的不同部分。保持这些角色的独立有助于你解释差异,而不会使用户代理字段超负荷。

信号它所描述的它并不证明的内容
User-Agent 头部客户声明的软件描述。发件人的身份或实际功能支持。
视口用于布局浏览器页面的尺寸。操作系统或网络位置。
语言设置客户请求或公开的语言偏好。用户的国籍或实际位置。
退出 IP目标可见的网络地址。完整的浏览器环境。
饼干状态根据浏览器规则存储和发送。一个一致的地址或收集数据的权利。

这些信号可以独立影响内容。由于出口或保存的区域 cookie,区域价格不匹配可能会出现,即使用户代理字符串是相同的。保留比较观察所需的最小上下文,然后检查相关层。

负责任地识别您自己的爬虫

您操作的爬虫应该使用支持网站规则和您的数据收集协议的身份。对于自有网站审核或约定数据馈送,一个描述性的客户端名称和联系方式可以使操作协调变得更加容易。

不要假设声称成为搜索引擎的身份可以获得该引擎所期望的权限。机器人规则是针对爬虫身份进行评估的,仅凭身份文本并不能确立您的过程就是指定的爬虫。在决定要抓取的路径时,请使用您实际的任务范围。

保持一个小的操作记录:客户描述、允许的主机、目的、所有者以及需要停止的条件。如果一个站点要求进行配置更改,记录会告诉您需要更新哪个过程。这在多个团队共享收集基础设施时尤其有帮助。

浏览器执行的成本也属于设计的一部分。比较一下 当前的Scrapeless定价 与您的任务要求的工作。更改标题的成本很低,但当字段仅在页面脚本运行后才存在时,它不能替代浏览器。

结论

用户代理是发出请求的客户端;User-Agent头部是该客户端提供的一个描述。利用这种区别来诊断兼容性和收集问题,而不假设该字符串控制整个环境。

对于一个抓取工作流程,定义实际的客户端,保持相关设置稳定,并验证返回的页面。当一个网站改变其响应时,在更改身份设置之前比较证据。一个有记录的环境可以为您提供可重现的观察结果,并清楚地解释所收集数据的代表意义。

在定义的浏览器环境中检查网页内容

对于需要JavaScript渲染和记录浏览器配置的允许工作流程,请使用Scrapeless Agent浏览器。

今天注册并获得 $5的免费信用额度 — 无需信用卡.

领取您的$5信用额度→

常见问题

用户代理与浏览器是一样的吗?

浏览器是一种用户代理。自动化的HTTP客户端和爬虫也可以充当用户代理。User-Agent头描述客户端软件,但并不将简单的HTTP客户端转换为浏览器。

更改User-Agent会更改IP地址吗?

更改User-Agent头不会更改出口IP地址。头配置和网络路由是独立的控制。使用实际请求和浏览器条件诊断内容差异。

网站可以信任User-Agent字符串吗?

网站不能仅仅将User-Agent字符串视为经过验证的身份或保证的特性支持。客户端提供字符串,浏览器可以减少或改变其细节。直接特性检查更适合兼容性决策。

每个抓取请求应该使用不同的用户代理吗?

抓取请求应该使用适合其任务的配置,并在相关操作之间保持一致性。任意更改可能会引入布局差异并模糊诊断。故意测试不同的客户端环境,而不是毫无理由地随机化它们。

参考文献