xpath模块,简单用法,查询标签(解析数据,过滤查找,获取标签名等),谓语条件查找,轴匹配查找

简介

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标签上面的所有兄弟标签
posted @ 2019-04-15 08:15  星牧  阅读(3058)  评论(0编辑  收藏  举报