解析html文本中的对象,Jsoup 数据抽取,遍历Document对象,获取属性,获取文本,查找元素,URL处理...

一、使用DOM方法来遍历一个文档

问题:从HTML文档中提取数据,并了解这个HTML文档的结构。

方法:将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作。示例代码:

File input = new File("D:/tmp/test.html");

Document doc = Jsoup.parse(input, "UTF-8", "http://www.mchweb.net/");

Element content = doc.getElementById("content");

Elements links = content.getElementsByTag("a");

for (Element link : links) {

String link_href = link.attr("href");

String link_text = link.text();

System.out.println(link_href);

System.out.println(link_text);

}

说明:Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。具体如下:

查找元素:

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)

元素数据:

attr(String key) //获取属性attr(String key, String value)设置属性

attributes() //获取所有属性

id(), className() and classNames()

text() //获取文本内容

text(String value) //设置文本内容

html() //获取元素内HTML

html(String value) //设置元素内的HTML内容

outerHtml() //获取元素外HTML内容

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)

二、从元素中抽取属性、文本和HTML

问题:在解析获得一个Document实例对象,并查找到一些元素之后,你希望取得在这些元素中的数据。

方法:

要取得一个属性的值,可以使用Node.attr(String key) 方法

对于一个元素中的文本,可以使用Element.text()方法

对于要取得元素或属性中的HTML内容,可以使用Element.html(), 或 Node.outerHtml()方法

示例:

String html = "

An example link.

";

Document doc = Jsoup.parse(html);// 解析HTML字符串返回一个Document实现

Element link = doc.select("a").first();// 查找第一个a元素

String text = doc.body().text(); // "An example link"//取得字符串中的文本

String link_href = link.attr("href"); // "http://example.com/"//取得链接地址

String link_text = link.text(); // "example""//取得链接地址中的文本

String link_outerHtml = link.outerHtml();// "example"

String link_innerH = link.html(); // "example"//取得链接内的html内容

说明:

上述方法是元素数据访问的核心办法。此外还其它一些方法可以使用:

Element.id()

Element.tagName()

Element.className() and Element.hasClass(String className)

这些访问器方法都有相应的setter方法来更改数据。

参见:

Element和Elements集合类的参考文档

URLs处理

使用CSS选择器语法来查找元素

三、URL处理

问题:有一个包含相对URLs路径的HTML文档,需要将这些相对路径转换成绝对路径的URLs。

方法:

在你解析文档时确保有指定base URI,然后

使用 abs: 属性前缀来取得包含base URI的绝对路径。代码如下:

Document doc = Jsoup.connect("http://www.mchweb.net").get();

Element link = doc.select("a").first();

String relHref = link.attr("href"); // == "/"

String absHref = link.attr("abs:href"); // "http://www.mchweb.net/"

说明:

在HTML元素中,URLs经常写成相对于文档位置的相对路径: .... 当你使用 Node.attr(String key) 方法来取得a元素的href属性时,它将直接返回在HTML源码中指定定的值。

假如你需要取得一个绝对路径,需要在属性名前加 abs: 前缀。这样就可以返回包含根路径的URL地址attr("abs:href")

因此,在解析HTML文档时,定义base URI非常重要。

如果你不想使用abs: 前缀,还有一个方法能够实现同样的功能 Node.absUrl(String key)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值