2014-11-04 90 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