python3學習 lxml模組

2022-06-26 21:42:20 字數 1433 閱讀 5974

在爬蟲的學習中,我們爬取網頁資訊之後就是對資訊項匹配,這個時候一般是使用正則。但是在使用中發現正則寫的不好的時候不能精確匹配(這其實是自己的問題!)所以就找啊找。想到了可以通過標籤來進行精確匹配豈不是比正則要快。所以找到了lxml。

因為lxml是對xml格式的解析,支援html格式,而對於xml格式的解析有一門專用的語言,xpath。xpath用於在xml文件中通過元素和屬性進行導航。lxml庫也是解析xml檔案,所以也應用了xpath語法。我們先學習一下xpath 的標準語法,然後將這些語法知識應用到lxml之中。

大家應該對xml或者是html都不陌生,預設大家都知道,所以就簡單介紹。

節點關係

父子節點(parent children)

無需解釋。

兄弟節點(sibling)

無需解釋。

先輩(ancestor)後代(descendant)

節點擊擇

表示式描述

nodename

選取此節點的所有子節點

/此路徑運算子出現在模式開頭時,表示應從根節點擊擇

//從當前節點開始遞迴下降,此路徑運算子出現在模式開頭時,表示應從根節點遞迴下降。

.選取當前節點

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

@選取屬性

*萬用字元.選擇所有元素節點與元素名無關

@選取屬性

@*選取所有屬性

:命名空間分隔符;將命名空間字首與元素名或屬性名分隔

()括號運算子(優先順序最高),強制運算優先順序

應用篩選模式(即謂詞,包括」過濾表示式」和」軸(向前/向後)」)

|兩個節點集合的聯合,eg:/div/a | //div/span

@選取屬性

匹配未知節點

萬用字元描述

*匹配任何節點

@*匹配任何屬性節點

node()

匹配任何型別的節點

例項

下面我們通過一些例子看一下謂詞+表示式的綜合:

路徑表示式

結果 /node()

根元素下所有的節點(包括文字節點,注釋節點等)

/text()

查詢文件根節點下的所有文字節點

/div/a[1]

選取屬於div的第乙個a元素

/div/a[1]

選取屬於div的第乙個a元素

/div/a[last()]

選取屬於div的子元素中倒數第乙個a元素

/div/a[last()-1]

選取屬於div的子元素中倒數第二個a元素

/div/a[position()

python3學習 lxml模組

在爬蟲的學習中,我們爬取網頁資訊之後就是對資訊項匹配,這個時候一般是使用正則。但是在使用中發現正則寫的不好的時候不能精確匹配 這其實是自己的問題!所以就找啊找。想到了可以通過標籤來進行精確匹配豈不是比正則要快。所以找到了lxml。因為lxml是對xml格式的解析,支援html格式,而對於xml格式的...

python3學習 pickle模組

pickle提供了乙個簡單的持久化功能。可以將物件以檔案的形式存放在磁碟上。基本介面 pickle.dump obj,file,protocol 註解 將物件obj儲存到檔案file中去。protocol為序列化使用的協議版本,0 ascii協議,所序列化的物件使用可列印的ascii碼表示 1 老式...

python3學習 Queue模組

python標準庫中帶有乙個queue模組,顧名思義,佇列。該模組也衍生出一些基本佇列不具有的功能。我們先看一下佇列的方法 put存資料 get取資料 empty 判斷佇列是否為空 qsize 顯示佇列中真實存在的元素長度 maxsize 最大支援佇列長度 join 等到隊列為空,該行語句下面的語句...