xpath简单介绍
xpath在python中的应用
xpath——xml Path Language (xml是⼀门语言,传输跟存储数据)
网页源码——html⽂件,是标识性语言
虽然不能直接使用xpath语法,可以借助第三方库,充当二者之间的桥梁——lxml
将html网页转变element对象,可以执行xpath语法了
使用步骤:先安装pip install lxml -i 换源
xpath表达式
表达式 | 描述 |
// | 从匹配选择的当前节点选择文档的节点,而不考虑他们的位置 |
/ | 从子节点选取,选择当前元素的下一级 |
@ | 选取属性 |
/text | 当前元素的文本内容 |
[]、[@] | 指定元素的索引或者属性特性 |
* | *表示所有 |
@* | 所有属性 |
xpath语法具体用法
1.获取元素
//与/表达式用法
# 导入模块
from lxml import etree
# 模拟网页源代码
html ='''
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class="">
</a>
</div>
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
'''
# 获取div标签
# xpath语法不能直接使用,实例化html读写
tree = etree.HTML(html) #html——>网页代码,tree是指elements对象
div=tree.xpath('//div')
print(div) #结果[<Element div at 0x1e09e1cca08>, <Element div at 0x1e09e47f808>]
'''
[<Element div at 0x1bc6d5b26c8>, <Element div at 0x1bc6d5b2508>]
1.返回数据类型为列表
2.只是获取到元素而已,并没有获取到div标签中的文本内容
3.//选择到的是所有div标签,不需要考虑标签的位置
4.取其中一个值可以通过下标取值,例如;print(div[0])
'''
# 获取em标签
em = tree.xpath('//em')
print(em) #结果[<Element em at 0x1e09e47f8c8>]
# 无论在网页代码中有一个标签还是两个标签,最后返回都是列表,取值用下标取
# 获取这个span标签 <span class="title">肖申克的救赎</span>
span=tree.xpath('//a/img')
print(span) #[<Element img at 0x1588abf1b88>]
# /表示一级一级的取,中间不能跨级
2.获取文本内容
/text用法
# 获取<em class="">1</em>中的文本内容
a = tree.xpath('//em/text()')[0]
print(a)
3.获取属性
@用法
from lxml import etree
html = '''
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class="">
</a>
</div>
'''
tree = etree.HTML(html)
# 获取https://movie.douban.com/subject/1292052/
href = tree.xpath('//a/@href')[0]
print(href)
# 获取 肖申克的救赎
alt=tree.xpath('//img/@alt')[0]
print(alt)