上一篇文章讲到了三种方法来解析数据,分别是正则表达式、Bs4还有xpath,这三种方法各有特点,也都有各自的应用场景,不过xpath可以说是较为常用的了。这一篇就来简单介绍一下xpath方法的入门实例。
# 首先需要安装lxml
# pip install lxml
# xpath相当于路径,在xml中根据父子关系进行查找
from lxml import etree
xml = '''
1
细水长流
1.68
高山流水
周大墙
林天则
周杰伦
陈承宇
二十多
胜天半子
盛气凌人
阿迪斯
欧文
'''
tree = etree.XML(xml)
result1 = tree.xpath("/book/nick/text()")
result2 = tree.xpath("/book//nick/text()") # //表示后代,后代中所有nick标签都提取出来
result3 = tree.xpath("/book/*/nick/text()") # *表示一代,通配符
print(result1)
print(result2)
print(result3)
从这个实例来看就能很明显的看出xpath是专门为xml准备的,像是寻找路径那般通过父子关系,去找到你想要的那个值,像树一样。
以下是输出结果:
首先是一个HTML文件:
Title
李嘉诚
胡辣汤
这个HTML文件的代码可供大家用来测试,也省了大家手打HTML的时间 。
from lxml import etree
tree = etree.parse("b.html")
# 打印出百度、谷歌、搜狗
result1 = tree.xpath("/html/body/ul/li/a/text()")
print(result1)
# 只打印出第一个li的信息,即“百度”
result2 = tree.xpath("/html/body/ul/li[1]/a/text()")
print(result2)
# 打印出href属性值为dapao的被标记文本
result3 = tree.xpath("/html/body/ol/li/a[@href='dapao']/text()")
print(result3)
# 遍历
ol_li_list = tree.xpath("/html/body/ol/li")
for li in ol_li_list:
# 从每一个li中提取到文字信息
result4 = li.xpath("./a/text()") # 在li中继续去寻找
print(result4)
result5 = li.xpath("./a/@href") # 拿到属性值
print(result5)
# 两种可能会用到的方式
print(tree.xpath("/html/body/ul/li/a/@href"))
在这里 xpath的语法可以看出是更为直接的,相比于正则表达式来说,不过正则表达式有更广泛的应用,xpath是专门针对xml文档的。这里也可以看出如果是爬虫的话,使用xpath更加的简洁明了,可读性更强,效率相对也会更高。
这篇文章会持续更新,在我空闲的时候会增添多一些实例。有兴趣的小伙伴可以点赞+收藏!你们的支持是我最大的动力