`
womendu
  • 浏览: 1481860 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Jsoup – Java版的JQuery

阅读更多

今天给大家介绍一款强大的,方便的,基于Java的Html parser — Jsoup。相比于大家熟悉的HtmlParser,Jsoup显得更强大,更易用。如果你使用过Jquery的选择器,那么当你使用Jsoup时,你会感到是那么的亲切…

Jsoup是一个方便于操作HTML的开源的java类库,基于MIT协议发布。其提供的API能够非常方便的从HTML中提出和处理数据,对HTML DOM的操作提供了类似于JQuery的方法。

解析来,我们实际看看Jsoup是怎么对HTML进行遍历和解析的吧。

解析出Document

1
2
3
String html = "<html><head><title>First parse</title></head>"
     + "<body><p>Parsed HTML into a doc.</p></body></html>" ;
Document doc = Jsoup.parse(html);

其返回的Document对象就是Jsoup定义的文档模型,包含了Elements和TextNodes.当然Document也可以认为是一个特殊的Element,因为其本身就是继承自Element.

解析HTML片段

当你有一段HTML片段需要解析,例如一个DIV包含着多个P元素,那么你可以使用下面的方法:

1
2
3
String html = "<div><p>Lorem ipsum.</p>" ;
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();

上面的doc其实对应:

1
< html > < head ></ head > < body >  < div >   < p >Lorem ipsum.</ p >  </ div > </ body ></ html >

body为:

1
<body> <div>  <p>Lorem ipsum.</p> </div></body>

从一个URL装载一个Document
你能够方便的从一个web页面获取并解析其HTML,参考代码:

1
2
Document doc = Jsoup.connect( "http://example.com/ " ).get();
String title = doc.title();

connect(String url)方法创建了一个Connection对象,get()方法获取并解析html文档。
Connection接口还提供了下面一些方法:

1
2
3
4
5
6
Document doc = Jsoup.connect( "http://example.com " )
   .data( "query" , "Java" )
   .userAgent( "Mozilla" )
   .cookie( "auth" , "token" )
   .timeout( 3000 )
   .post();


从一个文件装载Document
你可以从本地文件加载并解析HTML,参考代码:

1
2
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );

parse(File in, String charsetName, String baseUri) 会抛出IOException。baseUri参数是用来在解析html过程中,如果遇到相对路径的链接时,能够加上去成为绝对路径。

使用提供的DOM操作方法浏览Document
废话不说,看代码:

1
2
3
4
5
6
7
8
9
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );
 
Element content = doc.getElementById( "content" );
Elements links = content.getElementsByTag( "a" );
for (Element link : links) {
   String linkHref = link.attr( "href" );
   String linkText = link.text();
}

很清楚吧,是不是很像JS?
总结一下Jsoup提供的方法:
获取元素的有:
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key)
siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()
parent(), children(), child(int index)
获取元素数据:
attr(String key) 获取属性
attr(String key, String value) 设置属性
attributes() 获取所有属性
id(), className() and classNames()
text() 获取文字内容
text(String value) 设置文字内容
html() 获取html内容
html(String value) 设置html内容
outerHtml()
data() 获取类似script,style的数据内容
tag() and tagName()
操作HTML内容:
append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)

使用选择器语法来获取元素
如果你用过jQuery,这一段代码你绝对不会陌生:

1
2
3
4
5
6
7
8
9
10
11
File input = new File( "/tmp/input.html" );
Document doc = Jsoup.parse(input, "UTF-8" , "http://example.com/ " );
 
Elements links = doc.select( "a[href]" ); // a with href
Elements pngs = doc.select( "img[src$=.png]" );
   // img with src ending .png
 
Element masthead = doc.select( "div.masthead" ).first();
   // div with class=masthead
 
Elements resultLinks = doc.select( "h3.r > a" ); // direct a after h3

Jsoup支持的选择器一览:
tagname: 根据tabname获取元素
ns|tag: ns为命名空间下面选择tagname为tag的元素
#id: 根据ID获取元素
.class: 根据class获取元素
[attribute]: 根据指定的属性获取元素
[^attr]: 根据以attr开头的属性获取元素
[attr=value]: 指定属性值的元素
[attr=~regex]: 根据属性值匹配正则表达式获取元素
*: 匹配所以元素
当然,选择器还可以混合使用:
el#id:
el.class:
el[attr]:
ancestor child:
parent > child:
siblingA + siblingB:
siblingA ~ siblingX:
el, el, el:
还有伪选择器:
el:lt(n):
el:gt(n):
el:eq(n):
el:has(seletor):
el:contains(text):
el:containsOwn(text):
el:matches(regex):
el:matchesOwn(regex):

当然,Jsoup还有一些没总结到的方法,下次再记录吧。

0
1
分享到:
评论

相关推荐

    Jsoup库文件;Jsoup解析Java包

    Jsoup库文件;Jsoup解析Java包

    Jsoup HTML解析器For Java 在Java程序中使用JQuery操作DOM

    Jsoup HTML解析器For Java 在Java程序中使用JQuery操作DOM 模式识别的新技术 狂顶

    jsoup在java中解析dom

    jsoup在java代码中高效解析html字符串为dom结构,并可实现对dom结构的灵活操作,特别适合移动端返回字段为html形式的解析过滤处理

    JsoupXpath jsoup升级版 java爬虫工具

    JsoupXpath jsoup的升级版 ,支持jsoup的同时还支持原生xpath语法,让你的爬虫更得心应手,无所不爬!

    基于jsoup的java爬虫项目

    基于jsoup的java爬虫项目,maven项目 除用户密码外其他资源都有 可直接用 也可去我博客看使用 或者问我

    jsoup:Java HTML 解析器

    jsoup:Java HTML 解析器 jsoup是一个用于处理现实世界 HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器,提供了一个非常方便的 API,用于获取 URL 以及提取和操作数据。 jsoup实现了WHATWG HTML5规范...

    jsoup基于java爬虫项目

    jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 Jsoup的主要功能 1)从一个URL,文件或字符串中...

    jsoup.rar 用java实现jquery

    用于解析html文档的javaapi,很方便容易上手,就像在html文档中用jquery操作dom

    Java爬虫Jsoup+httpclient获取动态生成的数据

    主要介绍了Java爬虫Jsoup+httpclient获取动态生成的数据的相关资料,需要的朋友可以参考下

    jsoup Java HTML解析器

    jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器

    jsoup资源包-java

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 同样可以操作xml等。

    jsoupAPI中文版

    jsoupAPI中文版

    java网页抓取Jsoup包全

    java网页抓取所需的Jsoup三个包 jsoup-1.8.1.jar

    Jsoup.jar Jsoup jar 包 java

    可以解析xml ,html 的java jar 包;Jsoup,常用的jar 包

    java爬虫jsoup包

    jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

    基于java的开发源码-HTML解析器 jsoup.zip

    基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip 基于java的开发源码-HTML解析器 jsoup.zip ...

    JAVA网络爬虫jsoup包

    个人从网上搜索到的java网络爬虫jar包,实测可用,自己就是用的这个,将jar包添加到构建路径即可使用, Document document=Jsoup.connect("https://www.baidu.com/").ignoreContentType(true).timeout(0).post(); //...

    jsoup java爬虫 糗事 搞笑图片 百科

    jsoup java爬虫 搞笑图片 内带jsoup.jar maven 地址

    jsoup-1.15.3.jar

    jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jar,jsoup-1.15.3.jarjsoup-...

Global site tag (gtag.js) - Google Analytics