Извлечение данных из вложенного href из jsoup - PullRequest
1 голос
/ 06 ноября 2019

Я хотел бы получить данные из вложенного href из jsoup, я имею в виду: у меня есть href: https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999

, и я хочу взять все данные из этих 10 диаграмм, например:

1. СТИП МИОЦИАЛЬНОГО ВОЗРАСТА: 37 или АССОЦИАЦИЯ: СИЛЬНАЯ СТИЛЬНАЯ БОРЬБА КОМАНДА

2. ДЭНИЕЛ КОРМЕР ВОЗРАСТ: 40 или АССОЦИАЦИЯ: АМЕРИКАНСКАЯ АКАДЕМИЯ КИКБОКСИНГА

и т.д ..

Как это сделать?

    String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
    Document document = Jsoup.connect(url).get();

    Elements allH1 = document.select("h2");
    for (Element href : allH1) {

        Elements allAge = document.select("div.birth_info");
        for (Element  age : allAge) {
            System.out.println(href.select("a[href]").text().toString());
            System.out.println(age.select() // something there?);
        }

1 Ответ

0 голосов
/ 07 ноября 2019

Данные, которые вы ищете, присутствуют на отдельных страницах - у каждого бойца есть своя собственная страница, поэтому вы должны сканировать все страницы одну за другой, чтобы получить данные.
Сначала вы должны получить ссылку для каждой страницы. , с помощью селектора h2 > a[href]:

String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
Document document = Jsoup.connect(url).get();
Elements fighters = document.select("h2 > a[href]");
for (Element fighter : fighters) {
     System.out.println(fighter.text() + " " + fighter.attr("href"));
}

После этого вы можете загрузить каждую страницу и извлечь данные:

String fighterUrl = "https://www.sherdog.com" + fighter.attr("href"); 
Document doc = Jsoup.connect(fighterUrl).get();
Element fighterData = doc.select("div.data").first();
System.out.println(fighterData.text());

Объединяя вместе, вы получаете:

String url = "https://www.sherdog.com/news/rankings/2/Sherdogs-Official-Mixed-Martial-Arts-Rankings-164999";
Document document = Jsoup.connect(url).get();
Elements fighters = document.select("h2 > a[href]");
for (Element fighter : fighters) {
    System.out.println(fighter.text());
    String fighterUrl = "https://www.sherdog.com" + fighter.attr("href"); 
    Document doc = Jsoup.connect(fighterUrl).get();
    Element fighterData = doc.select("div.data").first();
    System.out.println(fighterData.text());
    System.out.println("---------------");
}

И (частичный) выход составляет:

Стайп Миоцик Родился: 1982-08-19 ВОЗРАСТ: 37 лет Независимости, США Рост 6'4 "193,04 см Вес 245 фунтов 111,13 кгАссоциация: Strong Style Fight Team Класс: Тяжелый вес Побед 19 15 нокаутов (нокаутов) (79%) 0 решений (0%) 4 решения (21%) Потери 3 2 нокаутов (67%) 0 решений (0%) 1 решения (33%. KO / TKO (45%) 5 ПРЕДСТАВЛЕНИЙ (23%) 7 РЕШЕНИЙ (32%) Потери 2 1 KO / TKO (50%) 0 ПРЕДСТАВЛЕНИЙ (0%) 1 РЕШЕНИЯ (50%) N / C 1

Если вы хотите получить возраст, ассоциацию и, таким образом, отдельные поля, вам придется извлечь ихс регулярным выражением.

...