xpath(xml path language) 是一种用于在xml文档中定位和选择元素的语言.可以使用lxml 库来执行xpath的查询.
1. 原理
1.1 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
1.2 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获
2. 使用
2.1 安装
pip install lxml
2.2 实例化etree对象
from lxml import etree
将本地的html文档中的源码数据加载到etree对象中
etree.parse(filePath)
tree = etree.parse("./test.html")
从互联网上获取的源码加载到对象中
etree.HTML('page_text')
#示例
page_text=requests.get(url=url).text
etree.HTML('page_text')
3. xpath表达式
# / 表示从根节点开始定位,表示一个层级
# // 表示多个层级.可以从任意位置开始定位
# //* 选择所有的元素
属性定位://div[@class='man'] tag[@attrName="attrValue"]
索引定位://div[@class="man"]/p[6] 索引是从1开始的。
#获取网页中html标签下head标签下的title标签的文本内容
print(tree.xpath("/html/head/title/text()"))
#获取div标签中class="man"的文本内容
print(tree.xpath("//div[@class='man']//text()"))
#以列表的形式获取div标签下class="man"标签为p下id为3的文本内容
print(tree.xpath("//div[@class='man']/p[3]/text()"))
#以列表的形式获取div标签下class="man"的id为5的li标签下id为0的a标签的内容
print(tree.xpath("//div[@class='man']//li[5]/a/text()")[0])
#以列表的形式获取html页面中id=7的li标签的文本内容
print(tree.xpath('//li[7]//text()')[0])
#以列表的形式获取html页面中div标签下class="man"下id=1的a标签属性值
print(tree.xpath('//div[@class="song"]/a[1]/@href')[0])
3.1 取文本
/text() #获取的是标签中的直系文本内容
//text() #标签中非直系文本内容(所有的文本内容)
3.2 取属性
/@attrName #img/src
3.3 去非文本
@href #取url地址