2014-11-04 106 views
-1

我試圖提取一些數據(請參閱下面的HTML)。我想提取HR中的人員。只有名字和姓氏。Jsoup查詢,只解析特定元素

HTML:

<tbody> 
    <tr> 
     <td>Peter</td> 
     <td>Smith</td> 
     <td>35</td> 
     <td>HR</td> 
    </tr> 
    <tr> 
     <td>Paul</td> 
     <td>Roberts</td> 
     <td>47</td> 
     <td>Legal</td> 
    </tr> 
    <tr> 
     <td>James</td> 
     <td>Griffin </td> 
     <td>23</td> 
     <td>HR</td> 
    </tr> 
</tbody> 

我想提取什麼:

Peter Smith 
James Griffin 

我走到這一步:

public class Extract { 

    public static void main(String[] args) throws IOException { 

     Document Page = Jsoup.connect("URL").get(); //pick up html 
     Element List = Page.select("tbody").first(); 
     Elements Info = List.select("tr"); 

     for(Element value: Info) 
     { 
       System.out.println(value.select("td").first()); //first <td> ... </td> 
       System.out.println(value.select("td").second() + "\n"); //??? Trying to take the second <td> ... </td> 
     } 

    } 

} 

回答

1

我建議把一個類上的所有td具有名字和姓氏如:

<td class="first-name">Peter</td> 
<td class="last-name">Smith</td> 
<td>35</td> 
<td>HR</td> 

然後打電話給你JSoup for循環中一樣的選擇:

Element firstNames= value.select(".first-name"); 
Element lastNames= value.select(".last-name"); 

或者類似的規定。關鍵是,選擇使用班級會更好,並會確保你除了名字之外什麼也得不到。

如果不控制輸入,那麼你還可以使用選擇爲:

Element firstNames= value.select("td:eq(0)"); 
Element lastNames= value.select("td:eq(1)"); 

不過這需要你確保信息總是在正確的順序。

+0

「td:eq(1)」完美結合。對於從HR中獲取數據的人有何建議?我應該只使用if語句嗎? – PHPeter 2014-11-04 19:12:32

+0

是的,我只會使用一個if(value.select(「td:eq(3)」)。equals(「HR」)) – 2014-11-04 19:14:14