使用选择器语法查找元素
问题
想要使用类似于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
方法可以被使用到Document
、Element
或Elements
对象中,它是上下文相关的,所以可以用来过滤出指定元素,或是链式调用进行选择元素。
select
返回Elements集合,并提供一系列方法来提取和操作数据。
Selector概述
tagname
: 通过标签来查找元素,e.g.a
、p
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
查找p
有body
样式的元素下的所有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
来查看完整的支持列表和详细信息。