您的位置:首页 > Web前端 > JavaScript

Jsoup入门-解析和遍历一个html文档

2014-07-13 17:50 741 查看

解析和遍历一个HTML文档

如何解析一个HTML文档:

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

(更详细内容可查看 解析一个HTML字符串.)

其解析器能够尽最大可能从你提供的HTML文档来创见一个干净的解析结果,无论HTML的格式是否完整。比如它可以处理:

没有关闭的标签 (比如:
<p>Lorem <p>Ipsum
parses to
<p>Lorem</p> <p>Ipsum</p>
)

隐式标签 (比如. 它可以自动将
<td>Table data</td>
包装成
<table><tr><td>?
)

创建可靠的文档结构(html标签包含head 和 body,在head只出现恰当的元素)

一个文档的对象模型

文档由多个Elements和TextNodes组成 (以及其它辅助nodes:详细可查看:nodes package tree).

其继承结构如下:
Document
继承
Element
继承
Node
.
TextNode
继承
Node
.

一个Element包含一个子节点集合,并拥有一个父Element。他们还提供了一个唯一的子元素过滤列表。

数据抽取

  你有一个HTML文档,你想从中提取数据。而且你知道一般的HTML文档的结构。可用类似dom方法解析HTML文档。

/**
* 获取htmlElement元素
* @author bling
* @throws IOException
* @create Date:2014-07-13
*/
@Test
public void getDataElement() throws IOException{
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();
System.out.println("linkHref:"+linkHref+"------"+"linkText:"+linkText);
}
}


Elements 提供类似查找Element的方法,并可提取操作数据,DOM对象为上下文:根据父亲Document查找匹配之下的document,并根据找到的document查找其下的孩子元素,使用这种方式可查找你想要的数据。

获取Elements的方法

getElementById(String id)


getElementsByTag(String tag)


getElementsByClass(String className)


getElementsByAttribute(String key)
(and related methods)

Element siblings:
siblingElements()
,
firstElementSibling()
,
lastElementSibling()
;
nextElementSibling()
,
previousElementSibling()


Graph:
parent()
,
children()
,
child(int index)


获取Element数据的方法

attr(String key)
to get and
attr(String key, String value)
to set attributes

attributes()
to get all attributes

id()
,
className()
and
classNames()


text()
to get and
text(String value)
to set the text content

html()
to get and
html(String value)
to set the inner HTML content

outerHtml()
to get the outer HTML value

data()
to get data content (e.g. of
script
and
style
tags)

tag()
and
tagName()


操作html和text的方法

append(String html)
,
prepend(String html)


appendText(String text)
,
prependText(String text)


appendElement(String tagName)
,
prependElement(String tagName)


html(String value)


数据抽取:Selector syntax(使用选择器语法,参考)

GitHub例子代码:https://github.com/Java-Group-Bling/Jsoup-learn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: