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標簽上面的所有兄弟標簽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM