Jsoup文档--提取数据(使用选择器语法查找元素)

使用选择器语法查找元素

问题

想要使用类似于CSS或jQuery的选择器语法查找和操作元素。

解决方案

使用Element.select(String selector)Elements.select(String selector)方法:

File input = new File("/temp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

Elements links = doc.select("a[href]");
Elements pngs = doc.select("img[src$=.png]");

Element masthead = doc.select("div.masthead").first();

Elements resultLinks = doc.select("h3.r > a");

描述

jsoup elements对象支持类似于CSS或jQuery的选择器语法来查找匹配的元素,允许非常强大和健壮的查询。
select方法可以被使用到DocumentElementElements对象中,它是上下文相关的,所以可以用来过滤出指定元素,或是链式调用进行选择元素。
select返回Elements集合,并提供一系列方法来提取和操作数据。

Selector概述

  • tagname: 通过标签来查找元素,e.g. ap
  • ns|tag: 通过命名空间下标签查找元素,e.g. 使用fb|name来查找<fb:name>元素
  • #id: 通过ID查找元素,e.g. #logo
  • .class: 通过class名称查找元素,e.g. .masthead
  • [attribute]: 利用属性查找元素,e.g. [href]
  • [^attr]: 利用属性名前缀来查找元素,e.g. 使用[^data-]来查找带有HTML5 Dataset属性的元素
  • [attr=value]: 利用属性值来查找元素,e.g. [width=500]
  • [attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,e.g. [href*=/path/]
  • [attr~=regex]: 利用属性值匹配正则表达式来查找元素,e.g. img[src~=(?i)\.(png|jpe?g)]
  • *: 这个符号将匹配所有元素

组合选择器

  • el#id: 元素+ID, e.g. div#logo
  • el.class: 元素+class, e.g. div.masthead
  • el[attr]: 元素+属性名称, e.g. a[href]
  • 任意组合,e.g. a[href].highlight
  • ancestor child: 祖先元素下的所有子元素, e.g. .body p 查找pbody样式的元素下的所有p元素
  • parent > child: 父级元素下的所有直接子元素(一级子元素), e.g. div.content > p 查找div下的所有p元素;body > * body下的所有直接子元素(一级子元素)
  • siblingA + siblingB: 查找A元素之前的第一个同级B元素,e.g. div.head + div
  • siblingA ~ siblingX: 查找A元素之前的同级X元素,e.g. h1 ~ p
  • el, el, el: 多选择器,查找匹配任一选择器的元素,e.g. div.masthead, div.logo

伪类选择器

  • :lt(n): 查找索引值 (i.e. 位于DOM树中相对于其父级元素的位置)小于n的同级元素,e.g. td:lt(3)
  • :gt(n):查找索引值大于n的同级元素,e.g. div p:gt(2)
  • :eq(n): 查找索引值等于n的同级元素,e.g. form input:eq(1)
  • :has(selector): 查找包含‘指定选择器匹配到元素’的元素,e.g. div:has(p)
  • :not(selector): 查找与指定选择器不匹配的元素,e.g. div:not(.logo)
  • :contains(text): 查找包含给定文本的元素,搜索时对大小写不敏感,e.g. p:contains(jsoup)
  • :containsOwn(text): 查找直接包含(即元素本身包含而不包括子类元素)给定文本的元素
  • :matches(regex): 查找包含与指定正则表达式相匹配文本的元素,e.g. div:matches((?i)login)
  • :matchesOwn(regex): 查找直接包含(即元素本身包含而不包括子类元素)与指定正则表达式相匹配文本的元素,
  • 注意:上述伪类选择器中的索引是从0开始的,第一个元素的索引是0,第二个元素的索引是1,以此类推…
    可以参阅Selector API来查看完整的支持列表和详细信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值