前言
在爬蟲的學習中,我們爬取網頁信息之后就是對信息項匹配,這個時候一般是使用正則。但是在使用中發現正則寫的不好的時候不能精確匹配(這其實是自己的問題!)所以就找啊找。想到了可以通過標簽來進行精確匹配豈不是比正則要快。所以找到了lxml。
lxml是python的一個解析庫,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
XPath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言,它最初是用來搜尋XML文檔的,但是它同樣適用于HTML文檔的搜索
XPath的選擇功能十分強大,它提供了非常簡明的路徑選擇表達式,另外,它還提供了超過100個內建函數,用于字符串、數值、時間的匹配以及節點、序列的處理等,幾乎所有我們想要定位的節點,都可以用XPath來選擇
XPath于1999年11月16日成為W3C標準,它被設計為供XSLT、XPointer以及其他XML解析軟件使用,更多的文檔可以訪問其官方網站:https://www.w3.org/TR/xpath/
1、python庫lxml的安裝
windows系統下的安裝:
#pip安裝pip3 install lxml#wheel安裝#下載對應系統版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxmlpip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl
linux下安裝:
yum install -y epel-release libxslt-devel libxml2-devel openssl-develpip3 install lxml
驗證安裝:
$python3>>>import lxml
2、XPath常用規則
表達式 | 描述 |
nodename | 選取此節點的所有子節點 |
/ | 從當前節點選取直接子節點 |
// | 從當前節點選取子孫節點 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
@ | 選取屬性 |
* | 通配符,選擇所有元素節點與元素名 |
@* | 選取所有屬性 |
[@attrib] | 選取具有給定屬性的所有元素 |
[@attrib='value'] | 選取給定屬性具有給定值的所有元素 |
[tag] | 選取所有具有指定元素的直接子節點 |
[tag='text'] | 選取所有具有指定元素并且文本內容是text節點 |
(1)讀取文本解析節點
from lxml import etreetext='''<div> <ul> <li class="item-0"><a href="link1.html">第一個</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0"><a href="link5.html">a屬性</a> </ul> </div>'''html=etree.HTML(text) #初始化生成一個XPath解析對象result=etree.tostring(html,encoding='utf-8') #解析對象輸出代碼print(type(html))print(type(result))print(result.decode('utf-8'))#etree會修復HTML文本節點<class 'lxml.etree._Element'><class 'bytes'><html><body><div> <ul> <li class="item-0"><a href="link1.html">第一個</a></li> <li class="item-1"><a href="link2.html">second item</a></li> <li class="item-0"><a href="link5.html">a屬性</a> </li></ul> </div></body></html>
新聞熱點
疑難解答