- 浏览: 51063 次
- 性别:
- 来自: 湖北
文章分类
- 全部博客 (102)
- ibatis (4)
- spring (12)
- 数据库 (3)
- java (26)
- css (2)
- linux (1)
- hibernate (4)
- Maven (3)
- CMS (1)
- spring mvc (1)
- MyBati (1)
- WEB (1)
- 分布式 (2)
- webservice (2)
- 网络协议 (1)
- TCP (1)
- UDP协议 (1)
- sql优化原则 (1)
- android (1)
- hadoop (10)
- solr (2)
- Scala学习笔记--Actor和并发 (0)
- Spark (4)
- Scala (1)
- hbase (1)
- kafka (1)
- ICE (2)
- 机器学习算法 (2)
- Apache Ignite (1)
- python (1)
- tensorflow (2)
- openstack (1)
- 系统监控 (2)
- 大数据 (1)
- ogg (2)
- Oracle GoldenGate DDL 详细说明 使用手册(较早资料) (0)
- oracle (1)
最新评论
jsoup:解析HTML用法小结
原文 http://my.oschina.net/laiwanshan/blog/155869
1.解析方式
(1)从字符串解析
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parse HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
(2)从URL获取解析
Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
(3)从文件解析
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
2.DOM方式遍历元素
(1)搜索元素
getElementById(String id)
getElementByTag(String tag)
getElementByClass(String className)
getElementByAttribute(String key)
siblingElements(), firstElementSibling(), lastElementSibling(), nextElementSibling(), previousElementSibling()
parent(), children(), child(int index)
(2)获取元素数据
attr(String key) – 获取key属性
attributes() – 获取属性
id(), className(), classNames()
text() – 获取文本内容
html() – 获取元素内部HTML内容
outerHtml() – 获取包括此元素的HTML内容
data() – 获取<srcipt>或<style>标签中的内容
tag(), tagName()
3.选择器语法(jsoup与其他解析器的区别就是可以使用类似jquery的选择器语法来搜索及过滤出所需的元素)
(1)基本选择器
tagname: 搜索tag标签的元素
ns|tag: 搜索命名空间内tag标签的元素,如fb|name:<fb:name>
#id: 搜索有指定id的元素
.class: 搜索有指定class的元素
[attribute]: 搜索有attrribute属性的元素
[^attri]: 搜索有以attri开头的属性的元素
[attr=value]: 搜索有指定属性及其属性值的元素
[attr^=value], [attr$=value], [attr*=value]: 搜索有指定attr属性,且其属性值是以value开头、结尾或包括value的元素,如[href*=/path/]
[attr~=regex]: 搜索有指定attr属性,且其属性值符合regex正则表达式的元素
*: 搜索所有元素
(2)选择器组合
el#id: 同时指定标签名称和id
el.class: 同时指定标签名称和class
el[attr]: 同时指定标签名称和及其中所含属性的名称
上述3项的任意组合,如a[href].highlight
ancestor child: 包含,如div.content p,即搜索<div class=”content”>下含有<p>标签的元素
ancestor > child: 直接包含,如div.content > p,即搜索直属<div class="content">节点下的<p>标签元素;div.content > *,即搜索<div class="content">下的所有元素
siblingA + siblingB: 直接遍历,如div.head + div,即搜索<div class="head"><div>的元素,其中不再包含子元素
siblingA ~ siblingX: 遍历,如h1 ~ p,即<h1>下直接或间接有<p>的元素
el, el, el: 组合多个选择器,搜索满足其中一个选择器的元素
(3)伪选择器(条件选择器)
:lt(n): 搜索n号元素之前的元素
:gt(n): 搜索n号元素之后的元素
:eq(n): 搜索n号元素
:has(seletor): 搜索符合指定选择器的元素
:not(seletor): 搜索不符合指定选择器的元素
:contains(text): 搜索包含指定文本的元素,区分大小写
:containsOwn(text): 搜索直接指包含指定文本的元素
:matches(regex): 搜索符合指定正则表达式的元素
:matchesOwn(regex): 搜索本元素文本中符合指定正则表达式的元素
注意:以上伪选择器的索引中,第一个元素位于索引0,第二个元素位于索引1,……
4.获取元素的属性、文本和HTML
获取元素的属性值:Node.attr(String key)
获取元素的文本,包括与其组合的子元素:Element.text()
获取HTML:Element.html()或Node.outerHtml()
5.操作URL
Element.attr("href") – 直接获取URL
Element.attr("abs:href")或Element.absUrl("href") – 获取完整URL。如果HTML是从文件或字符串解析过来的,需要调用Jsoup.setBaseUri(String baseUri)来指定基URL,否则获取的完整URL只会是空字符串
6.测试例子
li[class=info] a[class=Author] - 空格前后表示包含关系,即表示li里的a
div[class=mod mod-main mod-lmain]:contains(教学反思) - div中包含"教学反思",适合同时有多个同名DIV的情况
/*
previousSibling()获取某标签前面的代码
nextSibling()获取某标签后的代码
如:
<form id=form1>
第一名:Lily <br/>
第二名:Tom <br/>
第三名:Peter <br/>
</form>
*/
Elements items = doc.select("form[id=form1]");
Elements prevs = items.select("br");
for(Element p : prevs){
String prevStr = p.previousSibling().toString().trim());
}
/*
最常用的链接抓取
*/
String itemTag = "div[class=mydiv]";
String linkTag = "a"
Elements items = doc.select(itemTag);
Elements links = items.select(linkTag);
for(Element l : links){
String href = l.attr("abs:href");//完整Href
String absHref = l.attr("href");//相对路径
String text = l.text();
String title = l.attr("title");
}
原文 http://my.oschina.net/laiwanshan/blog/155869
1.解析方式
(1)从字符串解析
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parse HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
(2)从URL获取解析
Document doc = Jsoup.connect("http://example.com/").get();
String title = doc.title();
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
(3)从文件解析
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
2.DOM方式遍历元素
(1)搜索元素
getElementById(String id)
getElementByTag(String tag)
getElementByClass(String className)
getElementByAttribute(String key)
siblingElements(), firstElementSibling(), lastElementSibling(), nextElementSibling(), previousElementSibling()
parent(), children(), child(int index)
(2)获取元素数据
attr(String key) – 获取key属性
attributes() – 获取属性
id(), className(), classNames()
text() – 获取文本内容
html() – 获取元素内部HTML内容
outerHtml() – 获取包括此元素的HTML内容
data() – 获取<srcipt>或<style>标签中的内容
tag(), tagName()
3.选择器语法(jsoup与其他解析器的区别就是可以使用类似jquery的选择器语法来搜索及过滤出所需的元素)
(1)基本选择器
tagname: 搜索tag标签的元素
ns|tag: 搜索命名空间内tag标签的元素,如fb|name:<fb:name>
#id: 搜索有指定id的元素
.class: 搜索有指定class的元素
[attribute]: 搜索有attrribute属性的元素
[^attri]: 搜索有以attri开头的属性的元素
[attr=value]: 搜索有指定属性及其属性值的元素
[attr^=value], [attr$=value], [attr*=value]: 搜索有指定attr属性,且其属性值是以value开头、结尾或包括value的元素,如[href*=/path/]
[attr~=regex]: 搜索有指定attr属性,且其属性值符合regex正则表达式的元素
*: 搜索所有元素
(2)选择器组合
el#id: 同时指定标签名称和id
el.class: 同时指定标签名称和class
el[attr]: 同时指定标签名称和及其中所含属性的名称
上述3项的任意组合,如a[href].highlight
ancestor child: 包含,如div.content p,即搜索<div class=”content”>下含有<p>标签的元素
ancestor > child: 直接包含,如div.content > p,即搜索直属<div class="content">节点下的<p>标签元素;div.content > *,即搜索<div class="content">下的所有元素
siblingA + siblingB: 直接遍历,如div.head + div,即搜索<div class="head"><div>的元素,其中不再包含子元素
siblingA ~ siblingX: 遍历,如h1 ~ p,即<h1>下直接或间接有<p>的元素
el, el, el: 组合多个选择器,搜索满足其中一个选择器的元素
(3)伪选择器(条件选择器)
:lt(n): 搜索n号元素之前的元素
:gt(n): 搜索n号元素之后的元素
:eq(n): 搜索n号元素
:has(seletor): 搜索符合指定选择器的元素
:not(seletor): 搜索不符合指定选择器的元素
:contains(text): 搜索包含指定文本的元素,区分大小写
:containsOwn(text): 搜索直接指包含指定文本的元素
:matches(regex): 搜索符合指定正则表达式的元素
:matchesOwn(regex): 搜索本元素文本中符合指定正则表达式的元素
注意:以上伪选择器的索引中,第一个元素位于索引0,第二个元素位于索引1,……
4.获取元素的属性、文本和HTML
获取元素的属性值:Node.attr(String key)
获取元素的文本,包括与其组合的子元素:Element.text()
获取HTML:Element.html()或Node.outerHtml()
5.操作URL
Element.attr("href") – 直接获取URL
Element.attr("abs:href")或Element.absUrl("href") – 获取完整URL。如果HTML是从文件或字符串解析过来的,需要调用Jsoup.setBaseUri(String baseUri)来指定基URL,否则获取的完整URL只会是空字符串
6.测试例子
li[class=info] a[class=Author] - 空格前后表示包含关系,即表示li里的a
div[class=mod mod-main mod-lmain]:contains(教学反思) - div中包含"教学反思",适合同时有多个同名DIV的情况
/*
previousSibling()获取某标签前面的代码
nextSibling()获取某标签后的代码
如:
<form id=form1>
第一名:Lily <br/>
第二名:Tom <br/>
第三名:Peter <br/>
</form>
*/
Elements items = doc.select("form[id=form1]");
Elements prevs = items.select("br");
for(Element p : prevs){
String prevStr = p.previousSibling().toString().trim());
}
/*
最常用的链接抓取
*/
String itemTag = "div[class=mydiv]";
String linkTag = "a"
Elements items = doc.select(itemTag);
Elements links = items.select(linkTag);
for(Element l : links){
String href = l.attr("abs:href");//完整Href
String absHref = l.attr("href");//相对路径
String text = l.text();
String title = l.attr("title");
}
发表评论
-
jvm
2018-03-26 09:47 359http://www.cnblogs.com/moonands ... -
多线程
2015-11-11 16:05 308public class ThreadDemo3 { ... -
java之装饰设计模式和继承的简单区别
2015-10-29 16:24 778http://jiangnanlove.iteye.com/b ... -
java注解
2015-10-26 11:18 369Java自定义注解小结 作者:谢伟伦 学习java有两年之余了 ... -
字符串补零除0
2015-10-21 11:55 657//去零操作 String str = "0050 ... -
代理模式与装饰模式差别,适配器模式
2015-10-07 19:29 700http://blog.csdn.net/hitprince/ ... -
license生成
2015-03-02 10:44 506package com.dameng.dmdp.utils; ... -
java 堆和栈
2014-11-27 15:18 4951.栈(stack)与堆(heap)都是J ... -
java内部类、静态内部类 小结
2014-11-26 14:12 5161)首先,用内部类是因 ... -
java 23种设计模式
2014-11-19 14:56 566http://zz563143188.iteye.com/bl ... -
Java调用webservice接口方法
2014-11-19 14:36 4841. Java调用webservice接口方法 webserv ... -
java基本类型
2014-11-05 14:05 673基本类型比较 -
java修饰符权限
2014-11-05 13:58 569(1)public:可以被所有其他类所访问。 (2)priv ... -
类型转换
2014-11-05 13:44 471short s1 = 1; s1 = s1 + 1;有错,s1 ... -
Sring x = new String("xyz")
2014-11-05 13:32 479只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了 ... -
java内部类和静态内部类调用
2014-06-23 14:06 517内部类 public class Test { clas ... -
匿名内部类
2014-06-18 15:00 407匿名内部类也就是没有 ... -
类的加载周期
2014-06-16 12:47 340类什么时候被加载/类加载时机: 第一:生成该类对象的时候,会 ... -
内部类
2014-05-05 14:43 467http://www.cnblogs.com/mengdd/a ... -
工厂模式
2014-03-24 15:17 496举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 ...
相关推荐
用Jsoup解析html的所有jar包!
使用Jsoup解析html网页,包含jsoup.jar \ api.chm \ 代码
jsoup解析HTML,获取htmlUrl
Jsoup解析html+xml
java语言,jsoup解析html修改文件名的一个demo
jsoup解析html网页的api
使用Jsoup解析Html文档,无须正则表达式,使用元素定位到Html的标签元素
这是使用Jsoup解析HTML得到数据的一个小例子,具体的使用方法请参见我的博客:http://blog.csdn.net/ProgramChangesWorld/article/details/47134255
一个简单地android解析html的例子
使用jsoup解析hmtl,获取对应数据
(1)从一个 URL,文件或字符串中解析HTML; (2)使用DOM或CSS选择器来查找、取出数据; (3)可操作HTML元素、属性、文本; 2、maven配置 <!– jsoup –> <groupId>org.jsoup ...
今天小编就为大家分享一篇使用jsoup解析html的table中的文本信息实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
包含jsoup-1.7.3.jar,jsoup-1.7.3-javadoc.jar,jsoup-1.7.3-sources.jar
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。 jsoup 可以从包括字符串、URL 地址...
使用android解析html文档,替换html中的内容