xpath语法简介

有多种方式可以从网页中提取我们需要的信息,既可以通过正则表达式,也可以使用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·
(0)

相关推荐

  • Python|快速掌握Python爬虫XPath语法

    Python|快速掌握Python爬虫XPath语法

  • ES6语法简介——3、默认参数和rest参数

    3.默认参数和rest参数 3.1.默认参数 ES5没有提供直接在参数列表指定参数默认值的语法,在ES6中简化了为形参提供默认值的过程,可以直接在参数列表中为形参指定默认值. 例: function ...

  • JavaScript的简介与语法大合集

    以最新的JavaScript标准为基准.通过简单但足够详细的内容,为你讲解从基础到高阶的JavaScript相关知识. JavaScript简介 让我们来看看JavaScript有什么特别之处,我们可 ...

  • XPath简介、功能及使用方法

    html = '''<html><head><title>The Dormouse's story</title></head> <b ...

  • CSS的简介和语法

    CSS简介: css指层叠样式表,是为了解决内容与表现分离的问题,可以大大提高工作效率,多个样式层叠为一也可以节省代码的重复 在很久很久以前,只使用html来进行布局,有关样式的部分使用html属性完 ...

  • 我这里整理了一个关于中药剂量的一个常识的简介,分享给各位朋友。

    关于度量:秦始皇统一六国,统一度量衡,但是通过中医的学习会发现度量衡还是很混乱,半斤八两,那么一两是多少呢?还有论钱论厘的,有的说一小勺,有的说一小杯,有的说一小碗,你怎么弄?我这里整理了一个关于中药 ...

  • 正则表达式 – 语法 | 菜鸟教程

    正则表达式 - 语法 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件 ...

  • 趋势丨蔗糖理想替代品——阿洛酮糖简介

    导语 作为蔗糖的理想替代品,阿洛酮糖是什么?有何特点? 文:中国食品报网丨欣文 图:Stockfood 我们曾分享过一篇关于甜味剂的解读文章,对甜味剂的优点及工业应用进行了介绍,指出世界范围内无糖和低 ...

  • 李默飞个人简介

    易学是我国劳动人民智慧的结晶,是一门古老的学科,自古就充满了无限的神秘,一直是人们不断探索和研究的学科.古往今来有无数名人都在易学上有突出成就,如谷鬼子.诸葛亮.袁天罡等名人.近当代更是涌现出数不胜数 ...