利用Jsoup可以实现对网页信息进行有效解析和提取,例如有网页内容如下:
<html>
<title>Hello, Jsoup!</title>
<body>
<div id="gtop" class="footer-mid tol">
<a href="http://jsoup.org/download">Jsoup的官方网站</a>
<div class="w">欢迎大家使用Jsoup!</div>
</div>
</body>
</html>
利用Jsoup提取标签的内容,代码如下:
Document doc = null;
try{
//获取HTML文档对象
doc = Jsoup.connect(strURL).get();
}catch(IOException ioe)
{
ioe.printStackTrace();
}
//提取<title>标签的内容
String strTitle = doc.select("title").text();
//提取id属性值为gtop的<div>标签的内容
String strText = doc.select("div[id=gtop]").text();
//提取网页中的链接
String strURL = doc.select("a").first().absUrl("href");
...
Jsoup提供了强大的查询选择器Selector类帮助使用者用尽可能简短的查询获取相关的信息。但是,我在使用时发现了一个小问题,就是对class属性值含有空格的标签进行提取时,利用如下查询模式是提取不到结果的。以上面的例子进行说明:
//提取class属性值为footer-mid tol的<div>标签的内容
String strText = doc.select("div.footer-mid tol").text();
查询结果为空字符串,但是利用下述查询模式就会得到结果
//提取class属性值为footer-mid tol的<div>标签的内容
//正确格式
String strText = doc.select("div[class=footer-mid tol]").text();
但是,如果class属性值不含有空格,则如下两种方式都可以得到正确的结果
//提取class属性值为w的<div>标签的内容
String strText1 = doc.select("div.w").text();
String strText2 = doc.select("div[class=w]").text();
所以,在写程序时,还是尽可能用[attr=val]模式进行查询。