1. Xpath
1-1. 什麼是xpath?
Xpath是⼀⻔在HTML/XML⽂檔中查找信息的語⾔,可⽤來在HTML/XML⽂檔中對元素和屬性進⾏遍歷
文檔: xpath介紹
1-2. xml與HTML數據格式
XML:
- 描述:可擴展標記語言
- 設計目標: 被設計爲傳輸和存儲數據,其焦點是數據的內容
HTML:
- 描述: 超文本標記語言
- 設計目標: 顯示數據以及如何更好的顯示
2-3. xml的節點關係
概念: 每個XML的標籤我們都稱之爲節點。
示例:
<book>
<title>hello world</title>
<author>juran</author>
<year>2019</year>
<book>
2. Xpath用法:
2-1. 節點選擇語法:
定義: XPath使⽤路徑表達式來選取XML⽂檔中的接待或者節點集。這些路徑表達式和我們在常規的電腦⽂件系統中看到的表達式⾮常相似。
表達式 | 描述 |
---|---|
/ | 從根節點選取 |
// | 從匹配選擇的當前節點選擇文檔中的節點,而不考慮他們的位置 |
. | 選取當前節點 |
… | 選取當前節點的父節點 |
@ | 選取 |
2-2. 查找某個特定的節點或者包含某個指定的值的節點:
路徑表達式 | 結果 |
---|---|
/bookstore/book[1] | 選取屬於 bookstore ⼦元素的第⼀個book 元素。 |
/bookstore/book[last()] | 選取屬於 bookstore ⼦元素的最後⼀個 book 元素。 |
/bookstore/book[last()-1] | 選取屬於 bookstore ⼦元素的倒數第⼆個 book 元素。 |
/bookstore/book[position()< 3] | 選取最前⾯的兩個屬於 bookstore 元素的⼦元素的 book 元素。 |
//title[@lang] | 選取所有擁有名爲 lang 的屬性的title 元素。 |
//title[@lang=‘eng’] | 選取所有 title 元素,且這些元素擁有值爲eng和lang屬性 |
/bookstore/book[price>35.00] | 選取 bookstore 元素的所有 book元素,且其中的 price 元素的值須⼤於 35.00。 |
2-3. 選擇未知節點:
XPath 通配符可⽤來選取未知的 XML 元素。
通配符 | 描述 |
---|---|
* | 匹配任何元素節點 |
@* | 匹配任何屬性節點 |
node() | 匹配任何類型的節點 |
常見路徑表達式,及表達式結果:
路徑表達式 | 結果 |
---|---|
/bookstore/* | 選取 bookstore 元素的所有⼦元素。 |
//* | 選取⽂檔中的所有元素。 |
html/node()/meta/@* | 選擇html下⾯任意節點下的meta節點的所有屬性 |
//title[@*] | 選取所有帶有屬性的 title 元素。 |
xpath的更多語法: 更多語法
3. lxml 庫
3-1. 特點
- lxml 是 ⼀個HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 數據。
- 利⽤etree.HTML,將字符串轉化爲Element對象
- lxml python 官⽅⽂檔:lxml官方文檔
- 可使⽤ pip 安裝:pip install lxml (或通過wheel⽅式安裝)
- lxml 可以⾃動修正 html 代碼