【问题标题】:How to get data from a class inside a class with same names but different data?如何从同名但数据不同的类中的类中获取数据?
【发布时间】:2019-09-26 12:29:26
【问题描述】:

我试图提取我的 DnD 角色统计数据(力量、敏捷、智慧等)并打印数字。到目前为止,我尝试过的一切都没有提取任何数据并打印为空。 https://www.dndbeyond.com/characters/11196319

我试过了

doc.select("ct-ability-summary__label");

doc.select("ct-ability-summary__label").first();

doc.select("div[class=ct-ability-summary__primary:eq(0)]");

List<String> Stats = new ArrayList<>();
for( Element element : doc.select("div[class=ct-ability-summary__primary]") )
        {
            Stats.add(element.text());
        }


<div class="ct-quick-info__abilities">
    <div class="ct-quick-info__ability">
        <div class=" ct-ability-summary">
            <div class="ct-ability-summary__heading">...</div>
            <div class="ct-ability-summary__primary">10</div>
            <div class="ct-ability-summary__secondary">...</div>
    <div class="ct-quick-info__ability">
        <div class=" ct-ability-summary">
            <div class="ct-ability-summary__heading">...</div>
            <div class="ct-ability-summary__primary">13</div>
            <div class="ct-ability-summary__secondary">...</div>

我试图从中提取数据并将其打印出来。所以在这种情况下,我希望打印 10 和 13。它可以添加到列表/数组或单个字符串中。只要它获得可用于打印的数据。如果这两个可以工作,假设我可以让其他 4 个工作。

【问题讨论】:

    标签: java html parsing jsoup html-parsing


    【解决方案1】:

    当您访问此页面时,您首先看到的是带有加载微调器的空白页面:

    这始终表明 JavaScript 会获取一些额外的数据并动态添加到页面 (DOM) 中。 Jsoup 无法执行 JavaScript,这就是您的选择返回 null 的原因。 您可以使用浏览器的调试器来检查加载的内容:

    您可以看到数据以 JSON 格式存储,并且可以使用此 URL 直接访问: https://www.dndbeyond.com/character/11196319/json

    不幸的是,Jsoup 无法解析 JSON,因此您必须使用其他库。另请注意,此页面执行一些计算,并非您看到的所有内容都直接记录在此 JSON 中。例如,如果你格式化它,你可以看到你有一些统计数据:

    stats: [
    {
    id: 1,
    name: null,
    value: 10},
    {
    id: 2,
    name: null,
    value: 13},
    {
    id: 3,
    name: null,
    value: 14},
    {
    id: 4,
    name: null,
    value: 15},
    {
    id: 5,
    name: null,
    value: 12},
    {
    id: 6,
    name: null,
    value: 12}
    ],
    

    似乎有些不对劲,因为你的智力不是 15 而是 16,那是因为你有种族加值 +1 并且该值存储在其他地方。找出这些统计数据如何相互影响可能很复杂。

    因此,为了确保您拥有正确的最终值而不是基数,我建议您放弃解析 JSON 的 Jsoup 方法并改用 Selenium Webdriver,因为它能够获得您看到的确切值,因为它执行 JavaScript。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多