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标签上面的所有兄弟标签