Jsoup解析HTML实例及文档方法详解Word文件下载.docx
- 文档编号:13205027
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:9
- 大小:18.60KB
Jsoup解析HTML实例及文档方法详解Word文件下载.docx
《Jsoup解析HTML实例及文档方法详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《Jsoup解析HTML实例及文档方法详解Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
Documentdoc=Jsoup.parse(html);
其解析器能够尽最大可能从你提供的HTML文档来创见一个干净的解析结果,无论HTML的格式是否完整。
比如它可以处理:
1、没有关闭的标签(比如:
&
Lorem&
Ipsumparsesto&
Lorem&
Ipsum&
)
2、隐式标签(比如.它可以自动将&
td&
Tabledata&
/td&
包装成&
table&
tr&
?
3、创建可靠的文档结构(html标签包含head和body,在head只出现恰当的元素)
一个文档的对象模型
1、文档由多个Elements和TextNodes组成(以及其它辅助nodes).
2、其继承结构如下:
Document继承Element继承Node.TextNode继承Node.
3、一个Element包含一个子节点集合,并拥有一个父Element。
他们还提供了一个唯一的子元素过滤列表。
从一个URL加载一个Document
存在问题
你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据。
你可以使用下面解决方法:
解决方法
使用Jsoup.connect(Stringurl)方法:
Documentdoc=Jsoup.connect("
Stringtitle=doc.title();
说明
connect(Stringurl)方法创建一个新的Connection,和get()取得和解析一个HTML文件。
如果从该URL获取HTML时发生错误,便会抛出IOException,应适当处理。
Connection接口还提供一个方法链来解决特殊请求,具体如下:
.data("
query"
"
Java"
.userAgent("
Mozilla"
.cookie("
auth"
token"
.timeout(3000)
.post();
这个方法只支持WebURLs(http和https协议);
假如你需要从一个文件加载,可以使用parse(Filein,StringcharsetName)代替。
从一个文件加载一个文档
问题
在本机硬盘上有一个HTML文件,需要对它进行解析从中抽取数据或进行修改。
办法
可以使用静态Jsoup.parse(Filein,StringcharsetName,StringbaseUri)方法:
Fileinput=newFile("
/tmp/input.html"
);
Documentdoc=Jsoup.parse(input,"
UTF-8"
parse(Filein,StringcharsetName,StringbaseUri)这个方法用来加载和解析一个HTML文件。
如在加载文件的时候发生错误,将抛出IOException,应作适当处理。
baseUri参数用于解决文件中URLs是相对路径的问题。
如果不需要可以传入一个空的字符串。
另外还有一个方法parse(Filein,StringcharsetName),它使用文件的路径做为baseUri。
这个方法适用于如果被解析文件位于网站的本地文件系统,且相关链接也指向该文件系统。
使用DOM方法来遍历一个文档
你有一个HTML文档要从中提取数据,并了解这个HTML文档的结构。
方法
将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作。
示例代码:
Elementcontent=doc.getElementById("
content"
Elementslinks=content.getElementsByTag("
a"
for(Elementlink:
links){
StringlinkHref=link.attr("
href"
StringlinkText=link.text();
}
Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据。
具体如下:
查找元素
getElementById(Stringid)
getElementsByTag(Stringtag)
getElementsByClass(StringclassName)
getElementsByAttribute(Stringkey)(andrelatedmethods)
Elementsiblings:
siblingElements(),firstElementSibling(),lastElementSibling();
nextElementSibling(),previousElementSibling()
Graph:
parent(),children(),child(intindex)
元素数据
attr(Stringkey)获取属性attr(Stringkey,Stringvalue)设置属性
attributes()获取所有属性
id(),className()andclassNames()
text()获取文本内容text(Stringvalue)设置文本内容
html()获取元素内HTMLhtml(Stringvalue)设置元素内的HTML内容
outerHtml()获取元素外HTML内容
data()获取数据内容(例如:
script和style标签)
tag()andtagName()
操作HTML和文本
append(Stringhtml),prepend(Stringhtml)
appendText(Stringtext),prependText(Stringtext)
appendElement(StringtagName),prependElement(StringtagName)
html(Stringvalue)
使用选择器语法来查找元素
你想使用类似于CSS或jQuery的语法来查找和操作元素。
可以使用Element.select(Stringselector)和Elements.select(Stringselector)方法实现:
./"
Elementslinks=doc.select("
a[href]"
//带有href属性的a元素
Elementspngs=doc.select("
img[src$=.png]"
//扩展名为.png的图片
Elementmasthead=doc.select("
div.masthead"
).first();
//class等于masthead的div标签
ElementsresultLinks=doc.select("
h3.r&
a"
//在h3元素之后的a元素
jsoupelements对象支持类似于CSS(或jquery)的选择器语法,来实现非常强大和灵活的查找功能。
.
这个select方法在Document,Element,或Elements对象中都可以使用。
且是上下文相关的,因此可实现指定元素的过滤,或者链式选择访问。
Select方法将返回一个Elements集合,并提供一组方法来抽取和处理结果。
Selector选择器概述
tagname:
通过标签查找元素,比如:
a
ns|tag:
通过标签在命名空间查找元素,比如:
可以用fb|name语法来查找&
fb:
name&
元素
#id:
通过ID查找元素,比如:
#logo
.class:
通过class名称查找元素,比如:
.masthead
[attribute]:
利用属性查找元素,比如:
[href]
[^attr]:
利用属性名前缀来查找元素,比如:
可以用[^data-]来查找带有HTML5Dataset属性的元素
[attr=value]:
利用属性值来查找元素,比如:
[width=500]
[attr^=value],[attr$=value],[attr*=value]:
利用匹配属性值开头、结尾或包含属性值来查找元素,比如:
[href*=/path/]
[attr~=regex]:
利用属性值匹配正则表达式来查找元素,比如:
img[src~=(?
i)\.(png|jpe?
g)]
*:
这个符号将匹配所有元素
Selector选择器组合使用
el#id:
元素+ID,比如:
div#logo
el.class:
元素+class,比如:
div.masthead
el[attr]:
a[href]
任意组合,比如:
a[href].highlight
ancestorchild:
查找某个元素下子元素,比如:
可以用.bodyp查找在"
body"
元素下的所有p元素
parent&
child:
查找某个父元素下的直接子元素,比如:
可以用div.content&
p查找p元素,也可以用body&
*查找body标签下所有直接子元素
siblingA+siblingB:
查找在A元素之前第一个同级元素B,比如:
div.head+div
siblingA~siblingX:
查找A元素之前的同级X元素,比如:
h1~p
el,el,el:
多个选择器组合,查找匹配任一选择器的唯一元素,例如:
div.masthead,div.logo
伪选择器selectors
:
lt(n):
查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:
td:
lt(3)表示小于三列的元素
gt(n):
查找哪些元素的同级索引值大于n,比如:
divp:
gt
(2)表示哪些div中有包含2个以上的p元素
eq(n):
查找
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Jsoup 解析 HTML 实例 文档 方法 详解