当前位置: 首页 > 工具软件 > Jsoupxpath > 使用案例 >

Jsoup xpath的使用

哈泰
2023-12-01

jsoup选择器

jsoup指南

jsoup使用

xpath的语法

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/");  

(3)解析body片段

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 


伪选择器(Pseudo selectors)

  • :lt(n):查找索引值(即DOM树中相对于其父元素的位置)小于n的同级元素,例如td:lt(3)
  • :gt(n):查找查找索引值大于n的同级元素,例如div p:gt(2)
  • :eq(n) :查找索引值等于n的同级元素,例如form input:eq(1)
  • :has(seletor):查找匹配选择器包含元素的元素,例如div:has(p)
  • :not(selector):查找不匹配选择器的元素,例如div:not(.logo)
  • :contains(text):查找包含给定文本的元素,大小写铭感,例如p:contains(jsoup)
  • :containsOwn(text):查找直接包含给定文本的元素
  • :matches(regex):查找其文本匹配指定的正则表达式的元素,例如div:matches((?i)login)
  • :matchesOwn(regex):查找其自身文本匹配指定的正则表达式的元素
  • 注意:上述伪选择器是0-基数的,亦即第一个元素索引值为0,第二个元素index为1等


URL处理

我们在处理HTML内容时,可能经常会遇到这种问题,需要将html页面里面的链接地址从相对地址转换成绝对地址,jsoup有一个方法用来解决此问题。我们前面对到的baseurl,就是用来解决此问题的。示例代码如下:

1
2
3
4
5
Document doc = Jsoup.connect( "http://www.baidu.com/" ).get();
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)。



 类似资料: