使用 Jsoup 将 table 从 link 解析为字符串

Parsing a table to a String from a link with Jsoup

就像标题中所说的那样,我想将 table 解析为字符串或字符串数​​组,这样,干净的文本来自当地公交运营商的网站。该网站有一个 table 出现在页面中间,其中包含下一小时该站点的公交车时间。

我已经有一段时间没有使用 Jsoup 了,但我终其一生都无法弄清楚为什么我拥有的东西不起作用。我尝试了从我在这里找到的类似问题的答案中提出的两个建议,但都没有用,而且我担心 table 的元素实际上是空的,因为它从来没有 returns 任何东西...

我从中提取数据的网站如下:http://www.stcp.pt/pt/viajar/horarios/?paragem=AAL2&t=smsbus (如果这没有显示任何 table 那是因为这个站点只在夜间,所以请尝试这个例如:http://www.stcp.pt/pt/viajar/horarios/?paragem=HB1&t=smsbus 应该在白天工作)

我的代码:

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 STCPreaderMain {
    public static void main(String[] args) throws IOException {

        String ParagemID = "AAL2"; // HB1, AAL2 for night

        String getUrl = "http://www.stcp.pt/pt/viajar/horarios/?paragem=REPLACE&t=smsbus";

        getUrl = getUrl.replace("REPLACE", ParagemID);

        String text = "";

        System.out.println(getUrl);

        Document doc = Jsoup.connect(getUrl).get();

        Elements tableElements = doc.select("table#smsBusResults");

        System.out.println(tableElements.text());

        Elements tableHeaderEles = tableElements.select("thead tr th");
        System.out.println("headers");
        for (int i = 0; i < tableHeaderEles.size(); i++) {
            System.out.println(tableHeaderEles.get(i).text());
        }
        System.out.println();

        Elements tableRowElements = tableElements.select(":not(thead) tr");

        for (int i = 0; i < tableRowElements.size(); i++) {
            Element row = tableRowElements.get(i);
            System.out.println("row");
            Elements rowItems = row.select("td");
            for (int j = 0; j < rowItems.size(); j++) {
                System.out.println(rowItems.get(j).text());
            }
            System.out.println();
        }

    }
}

(抱歉,如果代码格式不正确,有时 eclipse 的自动格式化程序会出现问题,而且我从来都不擅长格式化 :( )

基本上我的问题是我可以找到声明 table 名称为 smsBusResults 的行,但是当我实际去使用 table#smsBusResults 搜索它时,我似乎什么也没找到。 .

您找不到 table,因为它不在您发布的 URL 中...
当您转到 URL 时,浏览器正在下载其他 URL,其中之一是 http://www.stcp.pt/pt/itinerarium/soapclient.php?codigo=AAL2&linha=0,其中包含您的 table.
打开浏览器的 Developer Tools(按 F12)并观察网络流量 - 您会看到有几个 GET 请求,其中一个包含 table.