我想使用 Jsoup 和 Java 访问此网站上的表值:
http://mmcd.nmrfam.wisc.edu/test/cqsearch.py?cqid=cq_12391
例如,我想访问“5-(3,4-DICHLOROPHENYL)-6-METHYLPYRIMIDINE-2,4-DIAMIN” --> 它位于表值“Name”之后。
我对这种性质的其他问题的解决方案包括查找 header 标记,然后查找 th 标记下的“td”值。但是,这在这种情况下不起作用,因为表中的所有内容都有“td”标签。
有人知道如何访问前面描述的表的某些值吗?提前致谢
最佳答案
您可以使用 Selector documentation 中提到的 CSS 描述符指定要选择的元素。喜欢:
:eq(n)
其中n
是从 0 开始的索引同级索引,:has(选择器)
:包含(文本)
:匹配(正则表达式)
如果您的问题描述了您可以
- 选择具有
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-二氯苯基)-6-甲基嘧啶-2,4-二胺
我使用 td:matchesOwn(^Name:$)
来确保 Name:
是 td 中的整个文本(因为在正则表达式中 ^
表示文本开头,$
表示文本结尾)。这让我们可以消除包含像 surname:
这样的文本的单元格(如果有的话)。
关于java - 使用 Jsoup 和 Java 查找网页表中的值,其中所有内容都有 "td"标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403073/