十 XPath與lxml類庫

2022-06-30 12:51:09 字數 4654 閱讀 3461

(1)xml指可擴充套件標記語言(extensible markup language)

(2)xml是一中標記語言,類似於html

(3)xml的設計宗旨是傳輸資料,而非顯示資料

(4)xml的標籤需要我們自行定義

(5)xml被設計為具有自我描述性

(6)xml是w3c的推薦標準

官方文件:

資料格式

描述設計目標

xmlextensible markup language(可擴充套件標記語言)

被設計為傳輸和儲存資料,其焦點是資料的內容。

html

hypertext markup language(超文字標記語言)

顯示資料以及如何更好顯示資料。

html dom

document object model for html(文件物件模型)

通過 html dom,可以訪問所有的 html 元素,連同它們所包含的文字和屬性。可以對其中的內容進行修改和刪除,同時也可以建立新的元素。

html dom定義了訪問和操作html文件的標準方法,以樹結構方式表達html文件。

每個元素以及屬性都有乙個父

xml version="1.0" encoding="utf-8"

?>

<

book

>

<

title

>harry potter

title

>

<

author

>j k. rowling

author

>

<

year

>2005

year

>

<

price

>29.99

price

>

book

>

book元素是title、author、year以及price元素的父。

元素節點可有零個、乙個或多個子

title、author、year以及price元素都是book元素的子。

擁有相同的父的節點

title、author、year和price元素都是同胞

某節點的父、父的父等

xml version="1.0" encoding="utf-8"

?>

<

bookstore

>

<

book

>

<

title

>harry potter

title

>

<

author

>j k. rowling

author

>

<

year

>2005

year

>

<

price

>29.99

price

>

book

>

bookstore

>

title元素的先輩是book元素和bookstore元素

某個節點的子,子的子等

bookstore的後代是book、title、author、year以及price元素

xpath(xml path language)是一門在xml文件中查詢資訊的語言,可用來在xml文件中對元素和屬性進行遍歷。

xpath的官方文件:

(2)chrome外掛程式xpath helper

(3)firefox外掛程式xpath checker

xpath使用路徑表示式來選取xml文件中的節點或者節點集。

表示式描述

nodename

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

/從根節點擊取。

//從匹配選擇的當前節點擊擇文件中的節點,而不考慮它們的位置。

.選取當前節點。

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

@選取屬性。

路徑表示式以及表示式的結果:

`bookstore`  選取bookstore元素的所有子節點

`/bookstore`  選取根元素bookstore。注釋:假如路徑起始於正斜槓(/),則此路徑始終代表到某元素的絕對路徑。

`bookstore/book`  選取屬於bookstore的子元素的所有book元素

`//book`  選取所有book子元素,而不管它們在文件中的位置

`bookstore//book`  選擇屬於bookstore元素的後代的所有book元素,而不管它們位於bookstore之下的什麼位置

`//@lang`  選取名為lang的所有屬性

謂語用來查詢某個特定的節點或者包含某個指定的值的節點,被嵌在方括號中。

路徑表示式以及表示式的結果:

`/bookstore/book[1]`  選取屬於bookstore子元素的第乙個book元素

`/bookstore/book[last()]`  選取屬於bookstore子元素的最後乙個book元素

`/bookstore/book[last()-1]`  選取屬於bookstore子元素的倒數第二個book元素

`/bookstore/book[position()<3]`  選取最前面的兩個屬於bookstore元素的子元素的book元素        

`//title[@lang='eng']`  選取所有title元素,且這些元素擁有值為eng的lang屬性

`//title[@lang]`  選取所有擁有名為lang的屬性的title元素

`/bookstore/book[price>35.00]`  選取bookstore元素的所有book元素,且其中的price元素的值必須大於35.00

`/bookstore/book[price>35.00]/title`  選取bookstore元素的所有book元素中的,price元素值大於35的條件下,book元素中的title元素。

xpath萬用字元可以用來選取位置的xml元素。

萬用字元描述

*匹配任何元素節點。

@*匹配任何屬性節點。

node()

匹配任何型別的節點。

路徑表示式以及表示式的結果:

`/bookstore/*`  選取bookstore元素的所有子元素

`//*`  選取文件中的所有元素

`html/node()/meta/@*`  選取html下面任意節點下的meta節點的所有屬性

`//title[@*]`  選取所有帶有屬性的title元素

通過在路徑表示式中使用"|"運算子,可以選取若干個路徑。

`//book/title | //book/price`  選取book元素的所有title和price元素

`//title | //price`  選取文件中的所有title和price元素

`/bookstore/book/title | //price`  選取屬於bookstore元素的book元素的所有title元素,以及文件中所有的price元素

8、lxml庫

lxml是乙個html/xml的解析器,主要的功能是如何解析和提取html/xml資料。

lxml和正則一樣,也是用 c 實現的,是一款高效能的 python html/xml 解析器,可以利用之前的xpath語法,來快速的定位特定元素以及節點資訊。

lxml python的官方文件:

安裝:`pip install lxml`

from lxml import

etree

from pprint import

pprint

text = """

first item

second item

third item

fourth item

fifth item

"""#利用etree.html,將字串解析為html文件

html =etree.html(text)

#將字串序列化為html文件

result =etree.tostring(html)

#print(result.decode())

#利用etree.parse()來讀取外部檔案

html = etree.parse("

./hello.html")

result = etree.tostring(html,pretty_print=true)

#print(result.decode())

print

(type(html))

#ret = html.xpath("

//li")

print

(ret)

print

(len(ret))

print

(type(ret))

print

(type(ret[0]))

#[, , , , ]#5

##

Python爬蟲Xpath和lxml類庫系列之九

xpath xml path language 是一門在 xml 文件中查詢資訊的語言,可用來在 xml 文件中對元素和屬性進行遍歷。謂語用來查詢某個特定的節點或者包含某個指定的值的節點,被嵌在方括號中。xpath 萬用字元可用來選取未知的 xml 元素。通過在路徑表示式中使用 運算子,您可以選取若...

lxml類庫的xpath的使用

為什麼要學習lxml類庫和xpath呢?lxml類庫是一款高效能的python html xml解析器,我們可以利用xpath,來快速地定位特定元素以及獲取節點資訊。xpath是一門在html xml文件中查詢資訊的語言,可用來在html xml文件中對元素和屬性進行遍歷。xml和html的區別?x...

爬蟲訓練(五) Lxml庫與Xpath語法

一 lxml庫 lxml庫為xml解析庫,但也很好的支援了html文件的解析功能。lxml庫很實用的功能就是自動修正html 二 xpath語法 xpath是一門在xml文件中查詢資訊的語言,對html文件也有很好的支援。1 節點關係 節點名性質父節點 每個元素及屬性都有乙個節點 子節點元素節點可能...