java - 如何使用 JSoup 从 Sports Reference 的数据表中检索数据?

标签 java html jsoup

我正在尝试使用 JSoup 从体育引用表中检索球队的获胜次数。

Specifically, I am trying to receive the following data point highlighted below, with the html code provided

下面是我已经尝试过的,但在尝试访问此元素的文本时出现空指针异常,告诉我我的代码可能无法正确解析 HTML 代码。

Element Wins = document.selectFirst("td[data-stat=\"wins\"]");

我想要的是该元素的文本为 34(或某个数字,具体取决于团队获胜的次数)。

最佳答案

Check what your Document was able to read from page and print it 。如果它包含可以通过浏览器通过JavaScript动态添加的HTML内容,则需要使用Selenium而不是Jsoup作为工具。

For reading HTML source ,你可以写类似:

import java.io.IOException;
import org.jsoup.Jsoup;

public class JSoupHTMLSourceEx {
    public static void main(String[] args) throws IOException {
        String webPage = "https://www.basketball-reference.com/teams/CHI/2020.html#all_team_misc";
        String html = Jsoup.connect(webPage).get().html();
        System.out.println(html);
    }
}

由于 Jsoup 支持 cssSelector ,您可以尝试获取如下元素:

public static void main(String[] args)  {
        String webPage = "https://www.basketball-reference.com/teams/CHI/2020.html#all_team_misc";
        String html = Jsoup.connect(webPage).get().html();

Document document = Jsoup.parse(html);
    Elements tds = document.select("#team_misc > tbody > tr:nth-child(1) > td:nth-child(2)");
        for (Element e : tds) {
            System.out.println(e.text());
        }
}
<小时/>

但更好的解决方案是使用 Selenium - 用于测试 Web 应用程序的可移植框架 (more details about Selenium tool):

public static void main(String[] args) {
    String baseUrl = "https://www.basketball-reference.com/teams/CHI/2020.html#all_team_misc";
    WebDriver driver = new FirefoxDriver();

    driver.get(baseUrl);
    String innerText = driver.findElement(
        By.xpath("//*[@id="team_misc"]/tbody/tr[1]/td[1]")).getText();  
        System.out.println(innerText); 
    driver.quit();
    }
}

您也可以尝试代替:

driver.findElement(By.xpath("//*[@id="team_misc"]/tbody/tr[1]/td[1]")).getText(); 

in this form :

driver.findElement(By.xpath("//[@id="team_misc"]/tbody/tr[1]/td[1]")).getAttribute("innerHTML");
<小时/>

附注将来,从您想要获取信息或至少是 DOM 结构片段而不是图像的位置添加源链接将会很有用。

关于java - 如何使用 JSoup 从 Sports Reference 的数据表中检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59699079/

相关文章:

java - 返回java中循环中存在的值

javascript - CSS定位多个元素全宽高

java - 如何获取网站中的所有超链接及其段落?

java - Jsoup登录爬取游戏数据

java - 获取桌面绝对路径

java - 将通用对象与整数进行比较

java - 在多个 VM 上 hibernate

php - 处理为一行插入的多个字段

javascript - 如何访问 iframe 中 URL 的参数?

java - 拆分标签上的元素