Используя jsoup, я пытаюсь получить текст, используя путь селектора, но элемент «таблица», который находится в середине пути, действует так, как будто внутри него 0 элементов. - PullRequest
0 голосов
/ 21 мая 2018

Это сайт, над которым я работаю: http://rozklady.mpk.krakow.pl/?lang=PL&rozklad=20180520&linia=1

Текст, который я хочу извлечь: экран

Это код, который я написал:

    import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class fetch_bus_stops {
    public static void main(String[] args) {
        try {
            Document doc = Jsoup.connect("http://rozklady.mpk.krakow.pl/?lang=PL&rozklad=20180520&linia=1").userAgent("Mozilla/17.0").get();
            int i=0;
            int k=0;                       
            Elements select = doc.select("body > table > tbody > tr > td > table > tbody > tr > td:nth-child(1) > table > tbody > tr:nth-child(1) > td > table > tbody > tr > td:nth-child(0) > table > tbody > tr:nth-child(1) > td > table > tbody");
            int size = select.size();
            System.out.println("Elements size: " + size);
            for(Element row : select)
            {
                String string = String.format("tr:nth-child(" + Integer.toString(k) + ") > td:nth-child(0) > a > span");
                i++;
                k++;
                System.out.println(i+" "+row.select(string).text());
            }
            }
         catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

}

Проблема в том, что цикл не работает, размер "select" равен 0, я проверил размер элемента select по элементам, и с 4-м элементом "table" неожиданно размер "select" = 0,это почему?Как я могу это исправить?

1 Ответ

0 голосов
/ 21 мая 2018

Попробуйте

.main > tbody:nth-child(2) > tr:nth-child(1) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) tr

output:

0
<tr>
Wzgórza Krzesławickie
1
<tr>
Jarzębiny
2
<tr>
Darwina
3
<tr>
Wiadukty
4
<tr>
Wańkowicza
5
<tr>
Cienista
6
<tr>
Teatr Ludowy
7
<tr>
Rondo Kocmyrzowskie im. Ks. Gorzelanego
8
<tr>
Bieńczycka
9
<tr>
Rondo Czyżyńskie
10
<tr>
Centralna
11
<tr>
Rondo 308. Dywizjonu
12
<tr>
M1 Al. Pokoju
13
<tr>
TAURON Arena Kraków Al. Pokoju NZ
14
<tr>
Plaza
15
<tr>
Dąbie
16
<tr>
Ofiar Dąbia
17
<tr>
Fabryczna
18
<tr>
Francesco Nullo
19
<tr>
Teatr Variété
20
<tr>
Rondo Grzegórzeckie
21
<tr>
Hala Targowa
22
<tr>
Starowiślna
23
<tr>
Poczta Główna
24
<tr>
Plac Wszystkich Świętych
25
<tr>
Filharmonia
26
<tr>
Jubilat
27
<tr>
Komorowskiego
28
<tr>
Salwator
29
<tr>
Salwator

Анализ этой страницы будет проблемой.Однако ИМХО было бы лучше найти некоторые ориентиры и затем перейти к соседям.

Например,

td:containsOwn(przystanki)

даст вам необходимую строку "заголовка"

оттуда вымог перемещаться 3 родителей вверх и во второй ряд.

...