使用Jsoup解析html中的指定數據,十分方便。Jsoup工具十分強大,十分好用。但網上彷佛沒有很好的例子,本文的目的即在於此。建議仔細閱讀代碼中的幾個例子,Jsoup解析數據不外乎這幾種類型。css
第一步:將Jsoup JAR包導入項目html
第二步:使用Jsoup API正則表達式
1, 定位工具
經過div的屬性值,定位到html的div(塊),即所須要內容對應的塊。spa
示例代碼以下:.net
<div class="content">
2, 篩選數據code
a, 經過標籤頭,在div中繼續篩選數據。可能會找到不少的數據,這裏會用到循環。見eg1。orm
//eg1:解析百度音樂
Document doc = Jsoup.connect("http://list.mp3.baidu.com/top/singer/A.html").get();//打開連接
Element singerListDiv = doc.getElementsByAttributeValue("class", "content").first(); //這時候該html流文件存在內存中,css selector class=content 類型
Elements links = singerListDiv.getElementsByTag("a");//調用class=content 裏面的 a 標籤
for (Element link: links) {//使用循環
String linkHref = link.attr("href");
String linkText = link.text().trim();
System.out.println(linkHref);
}
b, 經過標籤名,在div中篩選數據,選中此標籤內的全部數據。見eg2htm
//eg2:解析萬年曆
Document doc = Jsoup.connect("http://www.nongli.com/item4/index.asp?dt=2012-03-03").get();
Element infoTable = doc.getElementsByAttributeValue("class", "table002").first();//得到信息表數據
Elements tableLineInfos = infoTable.select("tr"); //對該信息表繼續進行篩選,得到一個tr 集合 數據
for (Element lineInfo : tableLineInfos) {
String lineInfoContent = lineInfo.select("td").last().text().trim(); //得到tr集合中的一個td元素
System.out.println("jsoup is :" + lineInfoContent);
}
c, 限定篩選條件。若是eg5圖片
//eg5:查找html元素
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/");
Elements links = doc.select("a[href]"); // 連接
Elements pngs = doc.select("img[src$=.png]"); // 全部 png 的圖片
Element masthead = doc.select("div.masthead").first();// div with class=masthead
Elements resultLinks = doc.select("h3.r > a"); // direct a after h3
NOTE: <td colspan="2" class="l3">二月15日<br>壬辰年<br>癸卯月<br>丁卯日<br></td>
此處不能直接單獨得到三組數據,得到的是總的三個數據。可經過正則表達式分解
3, 獲取數據
即element.text()便可得到相關數據
plus: Jsoup有靈活的語法,好比經過class-value對指定div塊,可經過select(div.value)找到,更多用法請參考文檔!
參考中文文檔:
中文jsoup 地址