[英]How to retrieve data from data table from Sports Reference using JSoup?
我正在嘗試使用 JSoup 從 Sports Reference 表中檢索團隊的獲勝次數。
具體來說,我試圖接收下面突出顯示的以下數據點,並提供了 html 代碼
下面是我已經嘗試過的內容,但是在嘗試訪問此元素的文本時出現空指針異常,這告訴我我的代碼可能沒有正確解析 HTML 代碼。
Element wins = document.selectFirst("td[data-stat=\\"wins\\"]");
我想要的是這個元素的文本是 34(或一些數字,取決於團隊的獲勝次數)。
檢查您的文檔能夠從頁面讀取的內容並打印出來。 如果它包含可由瀏覽器通過 JavaScript 動態添加的 HTML 內容,則需要使用 Selenium 而不是 Jsoup 作為工具。
對於閱讀 HTML 源代碼,您可以編寫類似於:
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 應用程序的可移植框架(有關 Selenium 工具的更多詳細信息):
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();
driver.findElement(By.xpath("//[@id="team_misc"]/tbody/tr[1]/td[1]")).getAttribute("innerHTML");
PS 將來,添加源鏈接會很有用,您可以從中獲取信息或至少是 DOM 結構的片段而不是圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.