簡體   English   中英

在Java中使用Jsoup訪問表中的元素值

[英]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)

  • 接下來,您需要遍歷所有行並選擇thtd 您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM