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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章