Jsoup進階之獲取指定數據

使用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 地址

相關文章
相關標籤/搜索