Jsoup解析Html

来源:互联网 发布:php函数别名 编辑:程序博客网 时间:2024/06/05 18:10

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 stubtry {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 blocke.printStackTrace();}}}

上面的方法是针对这个url进行编写的,代码的主要部分已经做了注释。

还有就是别忘了引入Jsoup.jar。解析的主要内容我参考了鸿洋大神的制作CSDN客户端的中的内容链接


0 0
原创粉丝点击