使用jsoup对HTML文档进行解析和操作

时间:2022-05-24 07:38:44

最近做项目需要在java里面解析html标签,听人说jsoup好用,就用了下。

网上搜了下用法,发现都是复制粘贴,就打算自己总结一个。

我当时maven的最新包

<dependency>
	<groupId>org.jsoup</groupId>
	<artifactId>jsoup</artifactId>
	<version>1.11.2</version>
</dependency>


//所有的对象都是Jsoup包中的。
Document doc = Jsoup.parse("HTML字符串");//html转换成document
Elements img = doc.select("img[src^=http://baidu.com]");//使用过滤器获取想要的标签集合
for (int i = 0; i < img.size(); i++) {//遍历标签集合
    Element node = elements.get(i);//获取每一个标签
    String src = node.attr("src");//获取属性
    node.attr("src","http://blog.csdn.net/hjgzj");//给属性赋值
}
System.out.println(doc.toString());//打印修改后的HTML

代码中最重要的是过滤器,这个过滤器跟jQuery用法很像,我就对比总结了一下


功能 jsoup用法 jQuery用法
获取a标签 "a" $("a")
获取class为url的a标签 "a.url" $("a[class=url]")
获取src=http://abc.com的a标签 "a[src=http://abc.com]" $("a[src=http://abc.com]")
获取src以http开头的的a标签 "a[src^=http]"  
获取src以http结尾的的a标签 "a[src$=http]"  
获取src以http在任意位置的的a标签 "a[src*=http]"  
获取id=tab的标签 "#tab" $("#tab")

如果精通jQuery,那么知道上面这些就够了,你可以任意组合匹配你想要得到的标签。

[]是属性过滤器,你可以根据属性获取标签,如果需要同时满足多个属性的时候,就多写几个[]然后并列就可以了。

如:需要得到value=hello,type=text的input,那么把过滤器组合起来就可以了:"input[value=hello][type=text]"

选择器之间也可以加逗号",",表示或的关系。

如:需要得到value=hello,type=text的input或者src以/a开头的img,这样写就可以了"input[value=hello][type=text],img[src^=/a]",这种写法类似jQuery的$("#id1,#id2")

最常用的就是这几个:属性选择器:[attr=vla],类选择器:.class,标签选择器:input,ID选择器#ID:

还有其他的选择器,我看了下其实不太常用,就不写了,有兴趣看下http://www.open-open.com/jsoup/selector-syntax.htm