maven依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
使用前需要将jsoup的jar包build path到项目中。jsoup可以从包括字符串、URL地址、以及本地文件来加载HTML文档,并生成Document对象实例。三种解析方式如下:
(1)解析HTML格式的字符串
Document doc = Jsoup.parse("html格式的字符串");
(2)解析URL指向的页面
Document doc = Jsoup.connect(url).get();
(3)解析本地HTML文档
File input = new File("D:/test.html");
Document doc = Jsoup.parse(input,"UTF-8","http://www.csdn.net/");
Document document = Jsoup.parseBodyFragment(html);
选择器的基本用法:
tagname //使用标签名来定位,例如 a
ns:tg //使用命名空间的标签来定位, 例如 fb:name 来查找 <fb:name>元素
#id //使用元素id定位,例如 #logo
.class //使用元素的class属性定位,例如 .head
[attribute] //使用元素的的属性进行定位,例如[href]表示检索具有href属性的所有元素
[^attr] //使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] //使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value], [attr$=value], [attr*=value] //这三个语法分别代表,属性以 value 开头、结尾以及包含
[attr~=regex] // 使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)]
* // 定位所有元素
用一下方法可以获得元素(Element对象)的数据:
attr(String key) 获得元素的数据
attr(String key, String value) 设置元素数据
attributes() 获得所有属性
id(), className() classNames() 得到id class的值
text()得到文本值
text(String value) 设置文本值
html() 获取html
html(String value)设置html
outerHtml() 获得内部html
data()获得数据内容
tag() 得到tag 和 tagName() 得到tagname
URL处理
我们在处理HTML内容时,可能经常会遇到这种问题,需要将html页面里面的链接地址从相对地址转换成绝对地址,jsoup有一个方法用来解决此问题。我们前面对到的baseurl,就是用来解决此问题的。示例代码如下:
1
2
3
4
5
|
Element link = doc.select(
"a"
).first();
String relHref = link.attr(
"href"
);
// == "/"
String absHref = link.attr(
"abs:href"
);
|
在HTML元素中,URLs经常写成相对于文档位置的相对路径: <a href="/download">...</a>. 当你使用 Node.attr(String key) 方法来取得a元素的href属性时,它将直接返回在HTML源码中指定定的值。
假如你需要取得一个绝对路径,需要在属性名前加 abs: 前缀。这样就可以返回包含根路径的URL地址attr("abs:href")
因此,在解析HTML文档时,定义base URI非常重要。如果你不想使用abs: 前缀,还有一个方法能够实现同样的功能 Node.absUrl(String key)。