我无法用 jsoup 打开 link

I cannot open a link with jsoup

我正在尝试从卡内基基金会获取赠款说明,为此,我需要打开链接以获取文档。这适用于浏览器,但当我在 Eclipse 上使用 JSoup.connect(url).get() 时则无效。我的代码适用于其他链接,但不适用于这些类型。有解决方法吗? 其中一个链接是“https://www.carnegie.org/grants/grants-database/grant/680882743.0/”。

try {           
        currentDoc = Jsoup.connect(url).get();
    } catch (IOException e) {
        throw new IllegalArgumentException("URL cannot be reached");
    } catch (Exception e) {
        throw new RuntimeException();
    }

您尝试访问的 link 正在 return 正在访问包含 HTML 内容的 JSON 文档。这不同于 return 一个 HTML 文档的常规页面。 Jsoup.connect 需要 HTML 文档。

为了处理这种情况,您需要:

  1. Retrieve the JSON document
  2. resultJSON属性
  3. 中提取HTML内容
  4. 使用 Jsoup.parse
  5. 解析 HTML 内容

您可能想要 treat the HTML content as a fragment,而不是使用 Jsoup.parse(htmlContent, "", Parser.xmlParser()) 的文档。

如果您正在浏览一个网站并且需要编写可以同时处理 HTML 和 JSON 文档的代码,我建议采用以下工作流程:

  1. 使用URLConnection检索数据。
  2. 检查响应中的 content-type header。
  3. 如果内容类型是 application/json,从响应负载中的 result 属性 中提取 HTML 内容,否则假设整个响应负载是 HTML.
  4. 使用Jsoup.parse
  5. 解析上一步的结果

请注意,此代码假定每个 JSON 文档都有一个名为 result 的 属性,其内容为 HTML。这对于您的特定用例可能就足够了,但绝对不是所有 JSON 文档的有效假设。