在爬蟲的學習中,我們爬取網頁資訊之後就是對資訊項匹配,這個時候一般是使用正則。但是在使用中發現正則寫的不好的時候不能精確匹配(這其實是自己的問題!)所以就找啊找。想到了可以通過標籤來進行精確匹配豈不是比正則要快。所以找到了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 等到隊列為空,該行語句下面的語句...