(2)通過XPath位址定位標籤

2021-10-24 13:42:19 字數 3293 閱讀 8683

xpath是一門在xml文件中查詢資訊的語言。xpath可用來在xml文件中對元素和屬性進行遍歷。xpath是w3c xslt標準的主要元素,並且xquery和xpointer都構建於xpath表達之上。xpath在python的爬蟲學習中,起著舉足輕重的作用,對比正規表示式re,兩者可以完成同樣的工作,實現的功能也類似,但xpath明顯比re具有優勢,在網頁分析上使re退居二線。

xpath的全稱為xml path language,是一種小型的查詢語言,其有如下優點。

(1)可在xml中查詢資訊。

(2)支援html的查詢。

(3)可通過元素和屬性進行導航。

python使用xpath需要安裝lxml庫。

下面介紹一下xpath的基本語法知識,常見的使用方法主要有一下幾種。

選取節點////

//(雙斜槓)

定位根節點,會對全文進行掃瞄,在文件中選取所有符合條件的內容,以列表的形式返回。

/

//(單斜槓)

尋找當前標籤路徑的下一層路徑標籤或當前路徑標籤內容進行操作。

/ te

xt()

/text()

/text(

)獲取當前路徑下的文字內容。

/ @/@

/@提取當前路徑下的標籤屬性。

|(可選符)

使用「|」可選取若干個路徑,如//p|//div,即在當前路徑下選取所有符合條件的p標籤和div標籤。

.

..(點)

用來選取當前節點。

. ...

..(雙點)

選取當前節點的父節點。

謂語

謂語用來查詢某個特定節點或者包含某個指定值的節點。

謂語被鑲嵌在中括號中。

路徑表示式結果/bo

okst

ore/

book

[1

]/bookstore/book[1]

/books

tore

/boo

k[1]

選取屬於 bookstore 子元素的第乙個 book 元素。

/ bo

okst

ore/

book

[las

t()]

/bookstore/book[last()]

/books

tore

/boo

k[la

st()

]選取屬於 bookstore 子元素的最後乙個 book 元素。

/ bo

okst

ore/

book

[las

t()−

1]

/bookstore/book[last()-1]

/books

tore

/boo

k[la

st()

−1]選取屬於 bookstore 子元素的倒數第二個 book 元素。

/ bo

okst

ore/

book

[pos

itio

n(

)<3]

/bookstore/book[position()< 3]

/books

tore

/boo

k[po

siti

on()

<3]

選取最前面的兩個屬於 bookstore 元素的子元素的 book 元素。

/ /t

itle

[@la

ng

]//title[@lang]

//titl

e[@l

ang]

選取所有擁有名為 lang 的屬性的 title 元素。

/ /t

itle

[@la

ng=′

eng′

]//title[@lang='eng']

//titl

e[@l

ang=

′eng

′]選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性。

/ bo

okst

ore/

book

[pri

ce

>

35.00

]/bookstore/book[price>35.00]

/books

tore

/boo

k[pr

ice>35

.00]

選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大於 35.00。

/ bo

okst

ore/

book

[pri

ce

>

35.00]/

titl

e/bookstore/book[price>35.00]/title

/books

tore

/boo

k[pr

ice>35

.00]

/tit

le選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大於 35.00。

萬用字元

萬用字元描述∗

*∗匹配任何元素節點。

@ ∗@*

@∗匹配任何屬性節點。

xpath是lxml庫中的乙個函式,處理物件是,對於requests.get()函式得到的型別需要取其原始碼使用etree.html()函式轉換。

url=

''html=requests.get(url)

#html.encoding='utf-8'#避免中文亂碼

ht=lxml.etree.html(html.text)

url=

''html=requests.get(url)

ht=lxml.etree.html(html.content)

注意:text呼叫的型別是str,其中的中文會亂碼,可以在解碼前轉碼為「utf-8」,content呼叫的型別是bytes即二進位製碼,其沒有進行text中的轉碼所以不會亂碼。

angular2 通過指令限制輸入

最近在寫乙個表單,有些輸入框只能輸入數字,單又不想每次寫表單的時候,都要去驗證輸入的是不是數字,那麼就想到直接限制只能輸入數字,通過指令實現 這裡需要注意的是,不只更改dom的值,如果input為資料繫結的值,需要更新繫結值,所以需要引入ngmodel,通過viewtomodelupdate,來更新...

DB2通過備份建立資料庫

最近在使用db2時遇到乙個問題 如何把伺服器上備份下來的資料庫在本地復原上呢?在網上找啊找啊找啊好像沒有真正的恢復,通過自己的研究終於整明白了,和大家分享一下,希望對初學者有所幫助。由於是通過別的機器備份出來的檔案進行復原乙個新資料庫所以不能通過控制中心復原。首先將備份的資料庫檔案放在e db2ba...

DB2通過備份建立資料庫

最近在使用db2時遇到乙個問題 如何把伺服器上備份下來的資料庫在本地復原上呢?在網上找啊找啊找啊好像沒有真正的恢復,通過自己的研究終於整明白了,和大家分享一下,希望對初學者有所幫助。由於是通過別的機器備份出來的檔案進行復原乙個新資料庫所以不能通過控制中心復原。首先將備份的資料庫檔案放在e db2ba...