使用 JSoup 获取 table 的数据代码值

Using JSoup to get data-code value of a table

如何使用 JSoup 从 table 行中获取 data-code 值?

这是我尝试过的方法,但它什么也没打印:

Document doc = Jsoup.connect("http://www.example.com").get();
Elements dataCodes = doc.select("table[class=team-list]");

for (Element dataCode : dataCodes)
{
    System.out.println(dataCode.attr("data-code"));
}

HTML 代码如下所示:

<body>
<div id-=""main">
    <div id="inner">
        <div id="table" class="scores-table">
            <table class ="team-list">
                <tbody>

                <tr data-code="1" class="data odd"></tr>
                <tr data-code="2" class="data even"></tr>
                <tr data-code="3" class="data odd"></tr>
                <tr data-code="1" class="data even"></tr>       

                </tbody>
            </table>
        </div>
    </div>
</div>

我希望它打印出 table 每一行的数据代码值(这是团队编号)。

您的选择器应该下降到 tr 个元素:

Elements dataCodes = doc.select("table.team-list tr");

根据评论,这仍然会导致一个空列表 - 在这种情况下,table 可能是借助 javascript 逻辑或单独的 AJAX 动态生成的要求。

在这种情况下,一种可能的方法是让真正的浏览器处理动态 javascript、AJAX 部分。试试 selenium browser automation framework:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.example.com");

List<WebElement> elements = driver.findElements(By.cssSelector("table.team-list tr"));

for(WebElement element: elements)
{
    System.out.println(element.getAttribute('data-code'));
}