使用Java中的Jsoup访问表中的元素值

时间:2017-07-30 05:37:58

标签: java datatable jsoup

我想访问此网站上这个大表中的某些值:

http://www.hmdb.ca/metabolites/HMDB01448

例如,我想访问" Common Name" - > "硫酸盐"

我目前的解决方案是:

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());
        }
     }
  }      

出于某种原因,这不起作用。有什么想法吗?

提前谢谢!

编辑:我的问题与现有问题不同,因为我不知道要搜索的确切单元格,因为程序的不同迭代将产生不同的化学名称(不仅是硫酸盐)。

1 个答案:

答案 0 :(得分:0)

您可以分两步访问所有行:

  • 首先,您需要选择td的所有行(它将过滤掉标题行)。这可以通过以下表达式完成:table.content-table > tbody > tr:has(td)

  • 接下来,您需要遍历所有行并选择thtd。您可以使用th方法从text()提取文字,但在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);
        }
    }
}

您可以使用它并找到最合适的解决方案来解决您的问题。我希望它有所帮助。