当前位置 : 主页 > 编程语言 > java >

xpath语法简介

来源:互联网 收集:自由互联 发布时间:2022-06-23
有多种方式可以从网页中提取我们需要的信息,既可以通过正则表达式,也可以使用BeautifulSoup模块。除此之外,xpath表达式也是一种常见用法。 xpath称之为xml路径语言,是一种基于xml的


有多种方式可以从网页中提取我们需要的信息,既可以通过正则表达式,也可以使用BeautifulSoup模块。除此之外,xpath表达式也是一种常见用法。

xpath称之为xml路径语言,是一种基于xml的树状结构,来提取特定元素的语言。在python中,最常见的是通过lxml模块来使用xpath, 基本用法如下

>>> from lxml import etree
>>> html = etree.parse("K00001.html", etree.HTMLParser())
>>> html.xpath('/html')

在xml的树状结构中,根节点用/表示,所有的元素都可以作为子节点存在。和linux文件树中相对和绝对定位类似,在xpath中,也有两种定位的写法

1. 绝对定位,用/表示,选取路径树中直接相连的子节点

2. 相对定位,用//表示,表示路径树中所有的子孙节点

同时,一个点号表示当前节点,两个点号表示当前节点父节点的简写方式在xpath中也是适用的。按照以上原则,就可以快速的写出最基础的路径表达式了,以下三种写法是等价的

# 从根节点开始,依次指定路径
>>> html.xpath('/html/head/title')
[<Element title at 0x7f3795bd1d48>]
# 利用//符号,得到属于html标签孙节点的title标签
>>> html.xpath('/html//title')
[<Element title at 0x7f3795bd1d48>]
# 直接用//符号,捕获title标签
>>> html.xpath('//title')
[<Element title at 0x7f3795bd1d48>]

在基础路径的基础上,我们可以通过一些筛选手段进一步对子节点进行限制。xpath的返回结果为一个列表,所以通过方括号运算符来提取子集,经典的用法有以下两种

1. 利用位置筛选

对于多个元素,通过数字下标来选取节点,用法如下

>>> html.xpath('//link')
[<Element link at 0x7f3793a6be88>, <Element link at 0x7f3795b960c8>, <Element link at 0x7f3793a6bf88>, <Element link at 0x7f3793a6b908>]
# 用数字下标提取子集
>>> html.xpath('//link[1]')
[<Element link at 0x7f3793a6be88>]
# 用last函数提取最后一个元素
>>> html.xpath('//link[last()]')
[<Element link at 0x7f3793a6b908>]
# position函数比整数下标加1
>>> html.xpath('//link[position() < 3]')
[<Element link at 0x7f3795b960c8>, <Element link at 0x7f3793a6b9c8>]

2. 利用属性筛选

可以通过指定属性或者属性的值来筛选节点,用法如下

# 筛选包含特定属性的点
>>> html.xpath('//link[@media]')
[<Element link at 0x7f3793a6b9c8>]
# 根据属性值进行筛选
>>> html.xpath('//link[@media = "only"]')
# 逻辑操作,根据多个属性的值进行筛选
>>> html.xpath('//link[@media = "only" and @herf="#"]')

当我们选取出符合条件的节点之后,进一步需要取出该节点的额外信息,通常是包含的文字或者属性值,用法如下

# 获取文本
>>> html.xpath('//title/text()')
# 获取属性值
>>> html.xpath('//a/@href')

通过xpath语法,给我们提供了一种正则和BeautifulSoup之外的一种选择,根据需要,灵活使用这3种策略,可以大大提供处理效率。

·end·

xpath语法简介_xml

一个只分享干货的

生信公众号



上一篇:使用BeautifulSoup解析网页内容
下一篇:没有了
网友评论