目录
正文
简介
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
简单用法
# 安装lxml解析器
pip3 install lxml
from lxml import etree
html = etree.HTML("xx.html")
# 开始xpath解析数据
html.xpath("/*") # 从根标签开始找所有匹配的
html.xpath("/bookstore") # 从根标签开始找所有匹配的
html.xpath("//bookstore") # 全文中找所有匹配的
xpath模块查询标签
查询标签(解析数据,过滤查找,获取标签名等)
xpath原生,既能查找属性,又能查找标签,而在selenium只能查找标签
# 获取属性,文本
e = html.xpath("//book[price > 30]")[0]
print(type(e))
# from lxml.etree import _Element
print(e.text) # 访问文本 不包含子标签的文本
print(e.attrib) # 访问属性
# 获取属性
html.xpath("//bookstore/@id") # 获取bookstore标签的id属性值
html.xpath("//bookstore/@*") # 获取bookstore标签的所有属性值
html.xpath("//bookstore/attribute::id") # 获取bookstore标签的id属性值
# 获取文本
html.xpath("//bookstore/text()") # 获取bookstore标签的文本
# / 与 //
html.xpath("/*") # 从根标签开始找所有匹配的
html.xpath("/bookstore") # 从根标签开始找所有匹配的
html.xpath("//bookstore") # 全文中找所有匹配的
# 通配符 *
html.xpath("/*") # 从根标签开始找所有匹配的
html.xpath("//book") # 只找book这个子标签,book里面的子标签不会被查出来6
html.xpath("//*") # 查找所有的子标签,子标签里的子标签也会被查出来
# 嵌套查找
html.xpath("//bookstore/book/title/text()") # bookstore标签里的book标签里的title标签的文本
谓语条件查找
# 索引查找
html.xpath("//bookstore/book[1]") # 获取bookstore标签里的 第一个 book标签
html.xpath("//bookstore/book[last()]") # last() 获取bookstore标签里的 最后一个 book标签
html.xpath("//bookstore/book[last()-1]/title/text()") # 获取bookstore标签里的 倒数第二个 book标签
html.xpath("//bookstore/book[position()>1]/title/text()") # 获取bookstore标签里的 索引大于1的 book标签
html.xpath("//book[price > 30]") # 查找book标签里的price标签文本大于30的标签
# 运算符查找 > < = >= <= !=
html.xpath("//book[price > 30]") # 查找book标签里的price标签文本大于30的标签
# 条件查找
html.xpath("//*[@lang]") # 查找带有lang属性的所有标签
html.xpath("//*[@lang='abc']")[0].attrib # 取出带有lang=abc属性的第一个标签的属性值
html.xpath("//*[@*]") # 查找带有属性的标签
# |
html.xpath("//title|//price") 选取所有的title标签和price标签
# and和 or或
html.xpath("//*[@id and @class]") # 查找既有id属性又有class属性的标签
轴匹配查找
# 查找父级标签
html.xpath("//book[1]/parent::*") # 查找父级标签,不能越级查找
html.xpath("//bookstore/ancestor::html") # 所有叫html的父标签(可以越级查找父标签)
html.xpath("//bookstore/ancestor::*") # 查找bookstore标签的所有父标签(包含父级的父级,不包含自己bookstore标签)
html.xpath("//bookstore/ancestor-or-self::*") # 查找bookstore标签的所有父标签(包含父级的父级,包含自己bookstore标签)
# 查找子级标签
html.xpath("//bookstore/child::*") # 查找bookstore标签的所有子级标签(不包含子级的子级的标签)
html.xpath("//bookstore/descendant::*") # 查找bookstore标签的所有后代标签(包含子级的子级的标签)
html.xpath("//book[1]/following::*") # 查找第一个book标签的所有后代标签
html.xpath("//book[1]/following::a") # 查找第一个book标签里的a标签(可以越级查找)
# 查找兄弟标签
html.xpath("//book[1]/following-sibling::*") # 第一个book标签下面的所有兄弟标签
html.xpath("//book[1]/preceding-sibling::*") # 第一个book标签上面的所有兄弟标签