解析庫之XPath

一、介紹

1.1 概念

  XPath全稱XML Path Language,XML路徑語言,在XML文檔中查找信息,搜尋XML文檔的,在爬蟲時,可以使用XPath對相應信息提取。

1.2 常用規則

表達式 描述
nodename 選取當前節點所有子節點
/ 選當前節點直接子節點
// 選當前節點選子孫節點
. 選取當前節點
. . 選取當前節點的父節點
@ 選取屬性

二、配置

安裝好lxml庫
在這裏插入圖片描述

三、實例

3.1 補全節點

XPath可以自動補全修正HTML代碼

from lxml import etree

text = '''
<div>
<ul>
<li class="item-0"><a href="link1.html">first item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-inactive"><a href="link3.html">third item</a></li>
<li class="item-1"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fitfh item</a>
</ul>
</div>
'''
# 聲明HTML文本,調用HTML類進行初始化(構造XPath解析對象)
html = etree.HTML(text)
# 使用tostring()方法輸出修正HTML代碼
result = etree.tostring(html)
# 結果是bytes類型
print(html, '\n')
# 將bytes類型轉化爲str類型
print(result.decode('utf-8'))

(缺少的li標籤給補上了,還添加了body標籤)
在這裏插入圖片描述

3.2 解析文本文件

對文本文件中的內容進行解析

》》本地創建一個文本文件,內容如下:
在這裏插入圖片描述

from lxml import etree
# 調用parse類進行初始化
html = etree.parse('C:\\Users\\Administrator\\Desktop\\test.html',etree.HTMLParser())
result = etree.tostring(html)
print(result.decode('utf-8'))

在這裏插入圖片描述

3.3 取所有節點

from lxml import etree

html = etree.parse('test.html', etree.HTMLParser())
result = html.xpath('//*')
print(result)

在這裏插入圖片描述

3.4 取所有指定節點

在這裏插入圖片描述

3.5 取所有子節點

在這裏插入圖片描述

3.6 取某一節點下所有子孫節點

在這裏插入圖片描述

Tips:
如果這裏使用//ul/a返回一個空列表,因爲/是直接獲取下面子節點,/ul下子節點爲/li

3.7 取父節點

如何取下面a節點的父節點li的class屬性值?
在這裏插入圖片描述
使用@規則定位a節點的屬性,獲取其父節點,再使用@定位父節點的class屬性
在這裏插入圖片描述

3.8 屬性特徵匹配節點

如何選取class爲item-1的所有節點
在這裏插入圖片描述
在這裏插入圖片描述

3.9 取標籤下的文本

3.9.1 方法一

先取節點,再取文本(使用text()方法)

在這裏插入圖片描述

3.9.2 方法二

直接選取所有子孫節點中的所有文本

在這裏插入圖片描述

3.9.3 兩者區別

方法一獲取的結果整潔;
方法二獲取的結果全面,但可能夾雜一些換行符等特殊字符。

3.10 取屬性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章