2016-08-02 100 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