xpath解析
xpath是在XML文档中搜索内容的一门语言,html是xml的一个子集
我们在使用xpath的过程中类似于对于文件目录的访问
<book>
<id>1</id>
<name>野花遍地⾹</name>
<price>1.23</price>
<author>
<nick>周⼤强</nick>
<nick>周芷若</nick>
</author>
</book>
首选先了解几个概念,在这个例子中:
-
book, id, name, price…都被称为节点.
-
Id, name, price, author被称为book的⼦节点
-
book被称为id, name, price, author的⽗节点
-
id, name, price,author被称为兄弟节点
安装
了解完了之后我们就可以去安装了
pip install lxml
用法
- 将要解析的html内容构造出
etree
对象 - 使用
etree
对象的xpath()
方法配合xpath表达式来完成对数据的提取
xml = """
<book>
<id>1</id>
<name>野花遍地⾹</name>
<price>1.23</price>
<nick>哈哈哈哈</nick>
<author id="1">
<nick id="2">周⼤强</nick>
<nick id="3">周芷若</nick>
<group>
<nick>hhh</nick>
</group>
</author>
</book>
"""
tree = etree.XML(xml) # 如果要处理html文本的话使用etree.HTML(html)
# 获取book的所有子节点
result = et.xpath("/book")
# 获取book的子节点nick
result = et.xpath("/book/nick")
# 获取book中所有nick节点
result = et.xpath("/book//nick")
# 获取book中指定级数下的nick节点,使用*占位表示通配符
result = et.xpath("/book/*/nick")
# 获取某个标签中的属性
result = tree.xpath("/book/author/@id")
# 获取某个标签中的文本
result = tree.xpath("/book/name/text()")
# 根据属性筛选
result = tree.xpath("/book/author/nick[@id='2']/text()")
示例
基本操作掌握之后可以通过这篇博客查看实际使用方法:python爬虫之使用xpath解析爬取猪八戒网数据