JAVA:解析HTML之--jsoup(一)

2014-11-24 03:31:56 · 作者: · 浏览: 2
JSOUP解析html(xml)代码部分十分简洁,并且有强大的选择器来获取html页面的元素,还有多种方式读取html文件:如 从服务器远程读取,活着读取本地html;

以下是两段简单代码:


//	第一种:从特定http://blog.csdn.net/lyc66666666666/article/details/网址来获取
	try {
			String sum_content = "";
            Document doc = Jsoup.connect("http://fashion.sina.com.cn/s/ce/2013-12-27/092831654.shtml").get(); 
            
            Element content = doc.getElementById("artibody");
            Elements tags = content.getElementsByTag("p");
			for (Element tag : tags) {// 遍历所有artibody下的p标签
				
				String attr = tag.attr("class");
				
				if (attr.equals("")) {// 过滤没用的属性
					sum_content += tag.text();
				}
			}
			System.out.println(sum_content);
			
        } catch (IOException e) {
            e.printStackTrace(); 
    }


//第二种:从特定文件获取(R.raw.sina_all_opml是本地xml文件)
    private List
  
   > getRssList(String id) {

		List
   
    > list = new ArrayList
    
     >(); // 获取RSS总清单文件 InputStream is = getResources().openRawResource(R.raw.sina_all_opml);//读取输入流 Document doc; try { doc = Jsoup.parse(is, "UTF-8", "");//以utf8格式读取文件 Element parent = doc.getElementById(id); Elements outlines = parent.getElementsByTag("outline");//得到所有tag为outline的标签集合 for (Element outline : outlines) { if (!outline.attr("text").equals("")) { String title = outline.attr("text");//直接获取属性名为text的值 String xmlUrl = outline.attr("xmlUrl"); HashMap
     
       map = new HashMap
      
       (); map.put("title", title); map.put("xmlUrl", xmlUrl); list.add(map); } } } catch (IOException e) { e.printStackTrace(); } return list; }
      
     
    
   
  


以下摘自百度百科,非本人观点:

jsoup的主要功能如下:


1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
jsoup是基于MIT协议发布的,可放心使用于商业项目。
jsoup 的主要类层次结构如下图所示:


/**************************************




文档输入


jsoup 可以从包括字符串、URL地址以及本地文件来加载HTML 文档,并生成Document 对象实例。
下面是相关代码:
// 直接从字符串中输入HTML 文档
String html = "开源中国社区"
+"

这里是jsoup 项目的相关文章

";
Document doc = Jsoup.parse(html);
// 从URL直接加载HTML 文档
Document doc =Jsoup.connect("http://blog.csdn.net/lyc66666666666/article/details/网址/").get();
String title = doc.title();
Document doc =Jsoup.connect("http://blog.csdn.net/lyc66666666666/article/details/网址/")
.data("query", "Java") //请求参数
.userAgent("I’mjsoup") //设置User-Agent
.cookie("auth", "token") //设置cookie
.timeout(3000) //设置连接超时时间
.post(); //使用POST方法访问URL
// 从文件中加载HTML 文档
File input = new File("D:/test.html");
Document doc = Jsoup.parse(input,"UTF-8","http://blog.csdn.net/lyc66666666666/article/details/网址/");
请大家注意最后一种HTML 文档输入方式中的parse 的第三个参数,为什么需要在这里指定一个http://blog.csdn.net/lyc66666666666/article/details/网址呢(虽然可以不指定,如第一种方法)?因为HTML 文档中会有很多例如链接、图片以及所引用的外部脚本、css文件等,而第三个名为baseURL 的参数的意思就是当HTML 文档使用相对路径方式引用外部文件时,jsoup会自动为这些URL 加上一个前缀,也就是这个baseURL。
例如 开源软件 会被转换成 开源软件




************************************************************************
解析并提取HTML 元素


这部分涉及一个HTML 解析器最基本的功能,但jsoup使用一种有别于其他开源项目的方式――选择器,我们将在最后一部分详细介绍jsoup选择器,本节中你将看到jsoup是如何用最简单的代码实现。
不过jsoup也提供了传统的DOM 方式的元素解析,看看下面的代码:
File input = new File("D:/test.html");
Document doc = Jsoup.parse(input, "UTF-8","http://blog.csdn.net/lyc66666666666/article/details/网址/");
Element content =doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref =link.attr("href");
String linkText =link.text();
}
你可能会觉得jsoup的方法似曾相识,没错,像getElementById 和getElementsByTag 方法跟