文章目錄
一、介紹
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 兩者區別
方法一獲取的結果整潔;
方法二獲取的結果全面,但可能夾雜一些換行符等特殊字符。