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