Jsoup库 解析DOM文档
DOM文档包括 HTML, XML等等
Jsoup 获取数据的方式
//html 文本, url, 本地html
String html = "<html>"
+ "<head>carloz Jsoup用法</head>"
+ "<body>"
+ "<p><a href='http://baidu.com'>这里是jsoup项目相关的文章</a></p>"
+ "</body>"
+ "</html>";
//html text
Document doc = Jsoup.parse(html);
doc.title(); String url = "http://baidu.com";
//get 方式获取数据
try {
Document doc2 = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
} //post 方式获取数据
try {
Document doc3 = Jsoup.connect(url).data("key", "value").timeout(3000).post();
} catch (IOException e) {
e.printStackTrace();
} //本地文件获取数据
File input = new File(Environment.getDataDirectory()+"/index.html");
try {
Document doc4 = Jsoup.parse(input, "utf-8", "http://baidu.com");
} catch (IOException e) {
e.printStackTrace();
}
Jsoup操作DOM文档
//html 文本, url, 本地html
String html = "<html>"
+ "<head>carloz Jsoup用法</head>"
+ "<body>"
+ "<p><a href='http://baidu.com'>这里是jsoup项目相关的文章</a></p>"
+ "</body>"
+ "</html>";
//html text
Document doc = Jsoup.parse(html);
doc.title();
//选择元素,获取元素的相关属性
Elements eles = doc.getElementsByTag("a");
for(Element link : eles){
String linkHref = link.attr("href");
String text = link.text();
} //遍历
Elements elements = doc.select("a[href]"); //带有连接的a标签
Elements elements2 = doc.select("img[src$=.png]"); //带有连接的图像
Element elements3 = doc.select("div.className").first(); //带有连接的图像 //元素操作
doc.select("div.className").attr("key", "value");
doc.select("div.className").addClass("myClass"); // 添加: class="myClass"
doc.select("img").removeAttr("onclick"); //移除方法 //文档清理, 将不安全的html代码 转化为安全的形式
String htmls = "";
String safeHtml = Jsoup.clean(htmls, Whitelist.basic());
------------------------------------------------
实例操作
* 1. 使用Jsoup解析 html新闻列表
添加网络访问权限 <uses-permission android:name="android.permission.INTERNET"/>
网络操作,需要新建线程
//涉及网络请求,创建一个线程
new Thread(new Runnable(){
@Override
public void run() {
parseHtml();
}
}).start();
private void parseHtml() {
    try {
        Document doc = Jsoup.connect(url).get();
        //去网页分析html格式
        Elements elements = doc.select("div.unit");
        for(Element e : elements) {
            String title = e.getElementsByTag("h1").first().text();
            String href = e.getElementsByTag("h1").first()
                    .getElementsByTag("a").first().attr("href");
            Log.i(TAG, title + ": " + href);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
运行结果
08-10 16:17:59.427: I/CARLOZ(14728): Google产品总监:改良Apple Watch UI的若干设想: http://www.csdn.net/article/2015-08-10/2825421
08-10 16:17:59.427: I/CARLOZ(14728): Android项目中如何用好构建神器Gradle?: http://www.csdn.net/article/2015-08-10/2825420
08-10 16:17:59.427: I/CARLOZ(14728): Oculus PC SDK 0.7版即将发布,含新Direct Driver Mode: http://www.csdn.net/article/2015-08-10/2825419-Oculus-SDK-0-7-new-direct-driver-mode-and-a-major-overhaul
08-10 16:17:59.427: I/CARLOZ(14728): 实战iOS 9:详解Xcode的Code Coverage工具: http://www.csdn.net/article/2015-08-07/2825410
08-10 16:17:59.427: I/CARLOZ(14728): 《近匠》Remix周哲,让Android运行在“电脑”上!: http://www.csdn.net/article/2015-08-06/2825396-remix-tablet
08-10 16:17:59.427: I/CARLOZ(14728): Android上玩玩Hook:Cydia Substrate实战: http://www.csdn.net/article/2015-08-07/2825405
08-10 16:17:59.427: I/CARLOZ(14728): 易讯理想科技自研AR技术 面向商业场景推“幻视”AR应用: http://www.csdn.net/article/2015-08-06/2825398
08-10 16:17:59.427: I/CARLOZ(14728): 令人惊叹的复杂之美:如何做一个iOS分形App?: http://www.csdn.net/article/2015-08-05/2825382
08-10 16:17:59.427: I/CARLOZ(14728): 游戏设计中的色彩哲学:没想象的那么简单: http://www.csdn.net/article/2015-08-04/2825378
08-10 16:17:59.427: I/CARLOZ(14728): iOS开发实战教学:在Swift怎样创建CocoaPod?: http://www.csdn.net/article/2015-08-05/2825383
* 2. 使用Jsoup解析Epub3
private void parseEpub(){
    //2. 使用Jsoup解析Epub电子书
    //toc.ncx 复制放在assets目录
    try {
        InputStream is = getAssets().open("toc.ncx");
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        String epubText = new String(buffer, "utf-8");
        Document doc = Jsoup.parse(epubText);
        String docTitle = doc.getElementsByTag("docTitle").first().text();
        Elements eles = doc.getElementsByTag("navPoint");
        for(Element e : eles){
            String title = e.text();
            String href = e.getElementsByTag("content").first().attr("src");
            Log.i(TAG,  title + ": " + href);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
运行结果
08-10 16:37:28.847: I/CARLOZ(16323): 第一章 童年: chapter_156815.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 第二章 灾难: chapter_156816.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 和尚的生涯: chapter_156817.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 第三章 踏上征途: chapter_156818.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 第四章 就从这里起步: chapter_156819.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 第五章 储蓄资本: chapter_156820.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 最后一个障碍: chapter_156821.xhtml
08-10 16:37:28.847: I/CARLOZ(16323): 第六章 霸业的开始: chapter_156822.xhtml
...
Jsoup库 解析DOM文档的更多相关文章
- Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术
		
一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...
 - java解析xml文档(dom)
		
DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...
 - 将XML解析成DOM文档
		
在支持html5的浏览其中,可以使用标准解析器DOMParser对象进行解析html或者xml等字符串 var data = '<div></div>'; var tmp = ...
 - JavaScript : DOM文档解析详解
		
JavaScript DOM 文档解析 1.节点(node):来源于网络理论,代表网络中的一个连接点.网络是由节点构成的集合 <p title=“a gentle reminder”> ...
 - DOM生成XML文档与解析XML文档(JUNIT测试)
		
package cn.liuning.test; import java.io.File; import java.io.IOException; import javax.xml.parsers.D ...
 - Java解析XML文档(简单实例)——dom解析xml
		
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
 - python优秀库 - 使用xmltodict解析xml文档
		
上次讲到如何使用BeautifulSoup解析XML文档,今天发现另外一个python库xmltodict(https://github.com/martinblech/xmltodict)也很简单. ...
 - JAVA读取XML,JAVA读取XML文档,JAVA解析XML文档,JAVA与XML,XML文档解析(Document Object Model, DOM)
		
使用Document Object Model, DOM解析XML文档 也可参考我的新浪博客:http://blog.sina.com.cn/s/blog_43ac5543010190w3.html ...
 - Java解析XML文档——dom解析xml
		
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
 
随机推荐
- ReactiveCocoa Tutorial
			
ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2 ReactiveCocoa教程——明确的介绍:第一部分(共两部分) As ...
 - 层层递进Struts1(八)之总结
			
先来看一下Struts1学习总结的思维导图,画的主要是Struts1中的重点和博客分布,如下所示: 系列博客的侧重点是: Struts1是什么? 为什么要使用它? 如何使用Struts1? Strut ...
 - 29. Divide Two Integers
			
用加减法模拟除法. 除法本质就是 被除数 - 商个除数相加 = 0 如果你电脑足够好,可以无限减..但是这个题肯定不是这么简单. 最快的方法还是 减去 商乘以除数. 但是这里不能使用乘法,那只好用BI ...
 - C语言学习_一个简单程序的解释与C学习方法概括
			
简单计算器程序示例: # include <stdio.h> //1.头文件 //2.加法函数 int add(int a,int b)//3.函数定义方式 { //4.函数体 retur ...
 - 织梦CMS后台卡死的解决办法
			
[复制来于网上]原文地址:http://www.sjyhome.com/dedecms-6.html 改过一次第二次忘记怎么改,还是转一下,下次忘记了翻翻文章就可以知道了.好记忆不如烂笔头 一.原因分 ...
 - DB2单个DB重启
			
db2单个数据库重启 . -------------------------------------------------------------- db2 connect to bpm user ...
 - 全栈project师?给把瑞士军刀你去砍鬼子好不好!?
			
来自www.techgogogo.com 编者注:本文来自Medium前三名推荐文章,发文时已经获得高达2,125个推荐,中文版由天地会珠海分舵编译.全文对当今风靡业界的"全栈xx师&quo ...
 - [io PWA] Great libraries and tools for great Progressive Web Apps
			
sw-toolbox: Github It provides a cononical implementation of all the runtime caching strategies that ...
 - Android进阶笔记03:Android应用中实现查看"附近的人"的功能
			
1. 要实现" 附近的人" 这功能,然后就研究了下: (1)首先要做的就是要获取到自己当前位置的经纬度(编程获取手机GPS定位模块的信息,进而获取自己当前位置的经纬度) (2)然后 ...
 - 第五篇:python基础之循环结构以及列表
			
python基础之循环结构以及列表 python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.pyth ...