2016-08-02 95 views
2

我有一个我想从中抓取数据的HTML文档。数据的标签除了是包含给定字符串的<td>标签的第13个<td>标签外,没有唯一标识符。在Jsoup中按内容选择标签并在给定标签后获得第n个标签

例如,文档中的第10个<td>标签包含单词“dog”(即<td>dog</td>。文档中没有其他<td>标签包含相同的数据)。鉴于只有单词“狗”,是否有可能使用Jsoup方法提取文档中第23rd <td>标签内的内容,如果是这样的话?

编辑:

<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.假设文件中有数百个动物。

回答

1

您可以使用structural pseudo selectors来定位第n个元素。

doc.select("td:nth-child(23)"); 

既然您正在寻找与狗行,您可以先选择该行。

Element dogRow = doc.select("tr:has(td:contains(dog))").first(); 

,然后选择第23子

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

编辑

我重读你的问题和s eems就像你想在一排中找到狗,然后找到第n个兄弟姐妹。

你可以使用这个elementSiblingIndexgetElementsByIndexEquals

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(); 
+1

这正是我需要的,谢谢。 – deterjan