Jsoup是採用java編寫的解析html文件的第三方庫,使用Jsoup提供的API我們可以很方便的解析html文件。下面來介紹一下如何使用jsoup解析html。
1.首先我們要了解一下html的dom文檔結構DOM節點介紹,下面是我截取的html文件的部分,會有助於理解下面的代碼
2.使用jsoup我們可以解析本地文件中的html以及網絡獲取的html。網絡獲取的html居多,所以我們通過一個例子說明一下解析的步驟。
上代碼:
package com.lql.jsoup;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class HtmlService {
public HtmlService() {
// TODO Auto-generated constructor stub
}
public static List<Map<String,Object>> parseHtml(String path) throws IOException{
List<Map<String, Object>> datas = new ArrayList<Map<String,Object>>();
Document document = Jsoup.connect(path).get();//從網絡獲取html文本
Elements unit_elemts = document.getElementsByClass("unit");//獲取doc節點樹中所有class="unit"的節點
for(int i = 0 ; i < unit_elemts.size(); i++){
Element element = unit_elemts.get(i);//取得第一個元素
Element h1_elemts = element.getElementsByTag("h1").get(0);
//用element取節點名爲<h1></h1>的節點,返回值是一個集合,我們取集合中的第一個元素
Element a_h1_elemts = h1_elemts.getElementsByTag("a").get(0);
//用h1_elemts節點取節點名爲<a></a>的第一個節點
String article_url = a_h1_elemts.attr("href");//取<a></a>中的href=""屬性值
String article_title = a_h1_elemts.text();//取改節點的文本值
Element h4_elemts = element.getElementsByTag("h4").get(0);//<h4></h4>
Element ago_h4_elemts = h4_elemts.getElementsByClass("ago").get(0);
String date = ago_h4_elemts.text();//發佈時間
Element view_time_h4_elemts = h4_elemts.getElementsByClass("view_time").get(0);
String view_time = view_time_h4_elemts.text();//瀏覽次數
Element num_recom_h4_elemts = h4_elemts.getElementsByClass("num_recom").get(0);
String num_recom = num_recom_h4_elemts.text();//評論次數
Element dl_elemts = element.getElementsByTag("dl").get(0);
Element dt_dl_elemt = dl_elemts.child(0);
String img_path = null;//圖片路徑,可能沒有圖片,故加異常處理
try {
Element a_dt_dl_elemt = dt_dl_elemt.getElementsByTag("a").get(0);
Element img_a_dt_dl_elemt = a_dt_dl_elemt.getElementsByTag("img").get(0);
img_path = img_a_dt_dl_elemt.attr("src");
} catch (Exception e) {
// TODO: handle exception
}
Element dd_dl_elemt = dl_elemts.getElementsByTag("dd").get(0);
String article_summary = dd_dl_elemt.text();//文章摘要
Map<String,Object> map = new HashMap<String, Object>();
map.put("article_url", article_url);
map.put("article_title", article_title);
map.put("date", date);
map.put("view_time", view_time);
map.put("num_recom", num_recom);
map.put("img_path", img_path);
map.put("article_summary", article_summary);
datas.add(map);
}
return datas;
}
}
package com.lql.jsoup;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
List<Map<String, Object>> datas = HtmlService.parseHtml("http://mobile.csdn.net/mobile/1");
for(Map<String,Object> map : datas){
System.out.println(map.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的方法是針對這個url進行編寫的,代碼的主要部分已經做了註釋。
還有就是別忘了引入Jsoup.jar。解析的主要內容我參考了鴻洋大神的製作CSDN客戶端的中的內容鏈接