「幹將莫邪」 —— Xpath 與 lxml 庫
來自專欄 極客猴
前面的文章,我們已經學會正則表達式以及 BeautifulSoup庫的用法。我們領教了正則表達式的便捷,感受 beautifulSoup 的高效。本文介紹也是內容提取的工具 —— Xpath,它一般和 lxml 庫搭配使用。所以,我稱這兩者為「幹將莫邪」。
1 Xpath 和 lxml
- Xpath
XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath 基於 XML 的樹狀結構,提供在數據結構樹中找尋節點的能力。
Xpath 原本是用於選取 XML 文檔節點信息。XPath 是於 1999 年 11 月 16 日 成為 W3C 標準。因其既簡單方便又容易,所以它逐漸被人說熟知。
- lxml
lxml 是功能豐富又簡單易用的,專門處理 XML 和 HTML 的 Python 官網標準庫。
2 Xpath 的語法
正則表達式的枯燥無味又學習成本高,Xpath 可以說是不及其萬分之一。所以只要花上 10 分鐘,掌握 Xpath 不在話下。Xpath 的語言以及如何從 HTML dom 樹中提取信息,我將其歸納為「主幹 - 樹支 - 綠葉」。
2.1 「主幹」 —— 選取節點
抓取信息,我們需知道要從哪裡開始抓取。因此,需要找個起始節點。Xpath 選擇起始節點有以下可選:
我們通過以下實例來了解其用法:
如果你對於提取節點沒有頭緒的時候,可以使用通配符來暫時替代。等查看輸出內容之後再進一步確認。
2.2 「分支」 —— 關係節點與謂語
這一步的過程其實是通過起點一步步來尋找最終包含我們所需內容的節點。我們有時需要使用到相鄰節點信息。因此,我們需要了解關係節點或者謂語。
- 關係節點
一般而言,DOM 樹中一個普通節點具有父節點、兄弟節點、子節點。當然也有例外的情況。這些有些節點比較特殊,可能沒有父節點,如根節點;也有可能是沒有子節點,如深度最大的節點。Xpath 也是有支持獲取關係節點的語法。
- 謂語
謂語用來查找某個特定的節點或者包含某個指定的值的節點。同時,它是被嵌在方括弧中的。
2.3"綠葉" —— 節點內容以及屬性
到了這一步,我們已經找到所需內容的節點了。接下來就是獲取該節點中的內容了。Xpath 語法提供了提供節點的文本內容以及屬性內容的功能。
具體用法見以下實例:
3 lxml 的用法
3.1 安裝 lxml
pip 是安裝庫文件的最簡便的方法,具體命令如下:
pip install lxml# 如果出現因下載失敗導致安裝不上的情況,可以先啟動 ss 再執行安裝命令# 或者在終端中使用代理pip --proxy http://代理ip:埠 install lxml
3.2 使用 lxml
lxml 使用起來是比較簡單的。我們首先要使用 lxml 的 etree 將 html 頁面進行初始化,然後丟給 Xpath 匹配即可。具體用法如下:
from lxml import etreehtml = requests.get(url) # 使用 requests 請求網頁selector = etree.HTML(html.text)content = selector.xpath(//a/text())
沒錯,就這短短几行代碼即可完成信息提取。
值得注意的是:xpath 查找匹配返回的類型有可能是一個值,也有可能是一個存放多個值的列表。這個取決於你的路徑表達式是如何編寫的。本文原創發佈於微信公眾號「極客猴」,歡迎關注第一時間獲取更多原創分享
推薦閱讀:
詳解 Requests 庫的用法
Python 多進程與多線程
爬蟲實戰一:爬取噹噹網所有 Python 書籍
推薦閱讀:
※爬蟲三步走(二)解析源碼
※學爬蟲利器XPath,看這一篇就夠了
※用xpath提取網頁上的元素,能否根據周圍的關鍵字來定位?
※利用XPath選取HTML節點
※xpath的簡單應用