我有一个 HTML 文档,我想从中抓取数据。数据的tag除了是第13位<td>
外没有唯一标识来自 <td>
的标签包含给定字符串的标签。
例如,第 10 个 <td>
文档中的标签包含单词“狗”(即 <td>dog</td>
。文档中的其他 <td>
标签也不包含相同的数据。)。给定仅单词“dog”,我是否有可能提取第 23 个 <td>
中的内容?使用 Jsoup 方法在文档中添加标签,如果是的话如何?
编辑:
<td>Cat</td>
<td align="center">40</td>
<td align="center">67</td>
<td align="center">58<br>0</td>
<td align="center">32</td>
<td>Dog</td>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">58<br>0</td>
<td align="center">99</td>
<td>Snake</td>
<td align="center">7</td>
<td align="center">85</td>
<td align="center">58<br>0</td>
<td align="center">13</td>
在这样的文档中,只给出动物的名字,我希望能够从中提取第 n 个标签中的数字,比方说 4。所以给定“猫”我想找到 32。给定“狗”,99。对于蛇 13。假设文档中有数百种动物。
最佳答案
您可以使用 structural pseudo selectors以第 n 个元素为目标。
doc.select("td:nth-child(23)");
由于您正在查找带有 Dog 的行,因此您可以先选择该行。
Element dogRow = doc.select("tr:has(td:contains(dog))").first();
然后选择第23个 child
String cellValue = dogRow.select("td:nth-child(23)").first().ownText();
或组合它们
String cellValue = doc
.select("tr:has(td:contains(dog)) > td:nth-child(23)")
.first()
.ownText();
编辑
我重读了你的问题,你似乎想在一行中找到 Dog,然后找到第 n 个 sibling 。
为此,您可以使用 elementSiblingIndex
和 getElementsByIndexEquals
:
Element dogRow = doc.select("tr:has(td:contains(dog))").first();
int dogCellIndex = dogRow
.select("td:contains(dog)")
.first()
.elementSiblingIndex();
int otherCellIndex = dogCellIndex + 10;
String cellValue = dogRow
.getElementsByIndexEquals(otherCellIndex)
.text();
关于java - 在 Jsoup 中按内容选择标签并在给定标签后获取第 n 个标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38723207/