Jsoup查询,只解析特定元素
问题描述:
我试图提取一些数据(请参阅下面的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>
}
}
}
答
我建议把一个类上的所有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)");
不过这需要你确保信息总是在正确的顺序。
“td:eq(1)”完美结合。对于从HR中获取数据的人有何建议?我应该只使用if语句吗? – PHPeter 2014-11-04 19:12:32
是的,我只会使用一个if(value.select(“td:eq(3)”)。equals(“HR”)) – 2014-11-04 19:14:14