[英]Access element values in a table using Jsoup in Java
我想訪問此網站上此大表中的某些值:
http://www.hmdb.ca/metabolites/HMDB01448
例如,我要訪問“公用名”->“硫酸鹽”
我當前的解決方案是:
Document doc = Jsoup.parse(s);
Elements tables = doc.select("table.content-table.table.table-condensed.table-bordered");
for (Element table : tables) {
for (Element header : table.select("th")) {
Elements strong = header.select("strong");
System.out.println(strong.get(0).text());
}
}
}
由於某種原因,這是行不通的。 有任何想法嗎?
先感謝您!
編輯:我的問題不同於現有的問題,因為我不知道要搜索的確切單元格,因為該程序的不同迭代將產生不同的化學名稱(不僅是硫酸鹽)。
您可以通過兩個步驟訪問所有行:
首先,您需要選擇所有帶有td
行(它將過濾出標題行)。 可以使用以下表達式完成: table.content-table > tbody > tr:has(td)
接下來,您需要遍歷所有行並選擇th
和td
。 您可以使用text()
方法從th
提取文本,但是在td
情況下,我建議使用html()
方法提取值,因為它可能包含純文本以及一些類似HTML的列表等。
看一下這個例子:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URI;
import java.net.URL;
final class JsoupTableReadExample {
public static void main(String[] args) throws IOException {
final URL url = URI.create("http://www.hmdb.ca/metabolites/HMDB01448").toURL();
final Document doc = Jsoup.parse(url, 4000);
final Elements rows = doc.select("table.content-table > tbody > tr:has(td)");
for (Element row : rows) {
String name = row.select("th").first().text();
String value = row.select("td").first().html();
System.out.println(name + " = " + value);
}
}
}
您可以試用它,找到最合適的解決方案來解決您的問題。 希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.