使用Jsoup和Java在网页中的表上查找值,其中所有内容都包含" td"标签

时间:2017-07-30 18:11:23

标签: java html html-table jsoup

我想使用Jsoup和Java访问本网站上的表值:

http://mmcd.nmrfam.wisc.edu/test/cqsearch.py?cqid=cq_12391

例如,我想访问" 5-(3,4-二氯苯基)-6-甲基吡啶-2,4-二胺" - >在表值"名称"。

之后

我对这种性质的其他问题的解决方案包括查找标头标签,然后找到" td"的值。在th标签下。但是,由于表格中的所有内容都有一个" td"标签。

有没有人有任何想法如何访问前面描述的表的某些值?提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用Selector documentation中提到的CSS描述符指定要选择的元素,如:

  • :eq(n)其中n是基于0的索引同级索引,
  • :has(selector)
  • :contains(text)
  • :matches(regex)

如果您的问题描述的话可以

  • 选择具有width="80%"属性
  • 的表格
  • 然后从该表选择表行(tr
    • 第一个单元格(td:eq(0))包含文本Name:字符串。
  • 从该行(基于第一个单元格的内容)选择第二个单元格(使用:eq(1)
  • 并获取其文字。

样本:

String url = "http://mmcd.nmrfam.wisc.edu/test/cqsearch.py?cqid=cq_12391";

Document doc = Jsoup.connect(url).get();
Elements select = doc.select("table[width=80%] tr:has(td:matchesOwn(^Name:$)) td:eq(1)");
String name = select.text(); 

System.out.println(name);

输出:5-(3,4-DICHLOROPHENYL)-6-METHYLPYRIMIDINE-2,4-DIAMINE

我使用td:matchesOwn(^Name:$)来确保Name:是td中的整个文本(因为在正则表达式中^表示文本的开头和$文本的结尾)。这样我们就可以删除包含surname:等文本的单元格(如果有的话)。