使用 JSoup 抓取 URL 数据时了解用户代理

Understanding User-Agents when scraping URL data using JSoup

我的基本目标是为网络链接创建类似于典型的网络展开项目的东西。为此,我正在使用 JSoup。

对于用户代理,我最初使用的是字符串 -

Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10

对于以下方法调用 -

public void connect(String URL) throws IOException {
    Document document = Jsoup
        .connect(URL)
        .userAgent(USER_AGENT)
        .referrer(REFERRER)
        .timeout(12000)
        .followRedirects(true)
        .get();
  }

但是,我可以看到 URL 在使用上述 User-Agent 时没有被 'correctly' 抓取,而不是像 Mozilla/5.0 这样的东西。例如,当我使用前者时,我没有在 URL 的 head 中收到带有 type=application/json+oembed 元标记的 oEmbed 数据,但当我使用后者时,它可以工作。我猜这可能与 URL 的 .js 脚本有关,它是用前一个用户代理发送的,而后者是普通的 HTML,但我还没有详细了解一下。

我知道 Mozilla/5.0 只是应该与 Mozilla 兼容,但 Mozilla/5.0 (Macintosh; U; Intel Mac OS X; de-de) AppleWebKit/523.10.3 (KHTML, like Gecko) Version/3.0.4 Safari/523.10 到底是什么意思?

有人可以澄清我的问题,或者为我指出一些有用的用户代理文档吗?

大多数 Web 浏览器使用如下 User-Agent 字符串值:

Mozilla/[version] ([system and browser information]) [platform] ([platform details]) [extensions]. 

例如,iPad 上的 Safari 使用了以下内容:

Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

这个字符串的组成部分如下:

Mozilla/5.0:以前用于表示与 Mozilla 渲染引擎的兼容性。

(iPad; U; CPU OS 3_2_1 like Mac OS X; en-us): 详情浏览器所在系统的 运行。 AppleWebKit/531.21.10:浏览器使用的平台。

(KHTML,如 Gecko):浏览器平台详细信息。

Mobile/7B405:浏览器使用它来指示直接在浏览器中或通过第三方提供的特定增强功能。这方面的一个例子是 Microsoft Live Meeting,它注册了一个扩展,以便 Live Meeting 服务知道该软件是否已经安装,这意味着它可以为加入会议提供简化的体验。

您可以从 wikipedia 阅读更多关于 User-Agent 的信息。如果您需要更具体的信息,还有文档链接。