Jsoup解析Html

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客戶端的中的內容鏈接


發佈了41 篇原創文章 · 獲贊 9 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章