Python解析庫(一) 使用XPath

2021-08-21 20:54:07 字數 2617 閱讀 3566

xpath最初是用來搜尋xml文件的,但是同樣可以用來解析html文件

表示式                                    描述

nodename                         選取此節點的所有子節點

/                                  從當前節點擊取直接子節點

//                                  從當前節點擊取子孫節點

.                                   選取當前節點

. .                                  選取當前節點的父節點

@                                   選取屬性

例如://title[@lang='eng']

這是乙個xpath規則,他代表選取所有名稱為title,同時屬性為lang的值為ang的節點。

先用etree模組申明一段html文字,etree模組可自動補全html文字,

然後呼叫tostring()方法輸出修正後的html文字,結果為bytes型

利用decode()方法轉化為str型別

用//開頭選取所有符合要求的節點,宣告文字後,呼叫xpath()方法,例如:xpath(//節點名稱)

返回的為列表,其中的每乙個元素都是乙個element物件,可選擇中括號加索引的形式取出其中的乙個物件

通過//和/來獲取當前節點的子節點或者子孫節點;

/用來獲取直接子節點,例如result=html.xpath(//li/a)

//用來獲取子孫節點,例如result=html.xpath(//ul//a)

用. .來查詢父節點

比如:from lxml import etree

html = etree.parse('./text.html' , etree.htmlparser())

result = html.xpath('//a[@href="link4.html"]/. ./@class']

print(result)

當然,. .可以用parent::來替換

比如要選取class為item-0的li節點,可以這樣實現:

from lxml import etree

html=etree.parse('./text.html',etree.htmlparser())

result = html.xpath('//li[@class='items-0']')

print(result)

可以利用xpath中的text()方法獲取其中節點中的文字

選取相應的節點獲取文字

from lxml import etree

html = etree.parse('./text.html' , etree.htmlparser())

result = html.xpath('//li[@class="item-0"]/a/text()')

print(result)

利用//來實現選取結果

from lxml import etree

html = etree.parse('./text.html' , etree.htmlparser())

result = html.xpath('//li[@class="item-0"]/a/text()')

print(result)

在li節點的括號中傳入數字1即可,這裡的序號是以1開頭,不是0

例如:result = html.xpath('//li[1]/a/text()')

在括號中傳入last()可知,獲取的便是最後乙個li節點

例如:result = html.xpath('//li[last()]/a/text()')

選取位置小於3的li節點,利用position()函式實現

例如:result = html.xpath('//li[position()<3]/a/text()')

獲取倒數第三個li節點:用last()實現

例如:result = html.xpath('//li[last()-2]/a/text()')

節點的軸方法,可獲取子元素,兄弟元素,父元素,祖先元素等

result = html.xpath('//li[1]/ancestor::*') #ancestor軸,用於獲取所有祖先元素

result = html.xpath('//li[1]/ancestor::div')#加限定條件div

result = html.xpath('//li[1]/child::a[href="link1.html"]')#獲取相應屬性的子節點

result = html.xpath('//li[1]/descendant::span')#descendant獲取所有的子孫節點,span是限定條件

result = html.xpath('//li[1]/following::*[2]')#following軸,獲取當前節點之後的所有節點,但是這裡加了索引限制

result = html.xpath('//li[1]/following-sibling::*')#follow-sibling軸,可以獲取當前節點之後的所有同級節點

python爬蟲基礎04 網頁解析庫xpath

xpath 是一門在 xml 文件中查詢資訊的語言。xpath 用於在 xml 文件中通過元素和屬性進行導航。相比於beautifulsoup,xpath在提取資料時會更加的方便。在python中很多庫都有提供xpath的功能,但是最基本的還是lxml這個庫,效率最高。在之前beautifulsou...

python中html解析庫使用

python中解析網頁常用的兩個庫 對於新手來說是利器 from bs4 import beautifulsoup from lxml import etreefrom bs4 import beautifulsoup soup beautifulsoup html,lxml kuai sou.se...

解析庫使用

xpath通過標籤 提取資訊 更適用於爬蟲方法一 處理文字from lxml import etree text class carousel indicators mycarousel data slide to 0 class active mycarousel data slide to 1 ...