Как получить данные из класса внутри класса с одинаковыми именами, но разными данными? - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь получить данные статистики моих персонажей 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 работать.

1 Ответ

0 голосов
/ 08 мая 2019

Когда вы посещаете эту страницу, первое, что вы видите, это пустая страница с загрузкой счетчика: enter image description here

Это всегда признак того, что некоторые дополнительные данные выбираются JavaScript и динамически добавляютсяна страницу (ДОМ).Jsoup не может выполнить JavaScript, и поэтому ваш выбор возвращает ноль.Вы можете использовать отладчик браузера, чтобы проверить, что загружено:

enter image description here

Вы можете видеть, что данные хранятся в формате 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 и это значение хранится где-то еще,Может быть сложно выяснить, как эти характеристики влияют друг на друга.

Поэтому, чтобы убедиться, что у вас есть правильные конечные значения вместо базовых, я рекомендую отказаться от подхода Jsoup с анализом JSON и использовать вместо этого Selenium Webdriver, так как он можетчтобы получить точные значения, которые вы видите, потому что он выполняет JavaScript.

...