java - 使用 Jsoup 和 Java 查找网页表中的值,其中所有内容都有 "td"标记

标签 java html html-table jsoup

我想使用 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/

相关文章:

html - 使用 CSS 将微调器放在图像容器的中心

javascript - 为什么我尝试使用 document.stylesheets 不起作用?

左对齐的 HTML 表格格式

HTML 表 CSS?

仅在 Netbeans 中运行的 Java Web 应用程序

Java - 暂停一个方法?

java - 在java中模拟具有两个最大幂的无符号数

java - 使用 if-condition 还是 HashMap?

asp.net - IE7 css 样式应用不一致

jquery - 如何在 Rails 中重新排序表格数据,以便最新数据显示在顶部?