文章目錄
一、XML
1. 什麼是XML
定義: XML 指可擴展標記語言(EXtensible Markup Language)
特點: XML 被設計爲具有自我描述性,是一種半結構化數據
作用: XML 的設計宗旨是傳輸數據,而非顯示數據。可以作爲配置文件記錄一些重要的配置信息
-
XML 的標籤需要我們自行定義。
-
XML 是一種標記語言,很類似 HTML
-
XML 被設計爲具有自我描述性,是一種半結構化數據
-
XML 是 W3C 的推薦標準
W3School官方文檔:http://www.w3school.com.cn/xml/index.asp
2.XML和HTML的區別
他們兩者都是用於操作數據或者結構數據,在結構上大致相同的,但他們在本質上卻存在着明顯的區別。
1.語法要求不同
-
在html中不區分大小寫,在xml中嚴格區分大小寫
-
在html中,有時不嚴格,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略</p>或者</li>標記。在xml中,是嚴格的樹狀結構,必須頭尾對應,絕對不能省略任何標記。
-
在xml中,單標籤要以/結尾 <a href=‘www’/>
-
在xml中,屬性值必須分裝在引號中。在html中,引號可用可不用。
-
在html中屬性名可以不帶屬性值 class = ‘’,xml必須帶屬性值,不能爲空 class = ‘abc’
-
xml文檔中,空白部分不會被解析器自動刪除,但是html是過濾掉空格的
總結:xml的語法要求更嚴格。
2. 標記不同
-
html使用固有的標記,xml沒有固有標記
-
html標籤是預定義的,xml標籤是自定義的、可擴展的。
3. 作用不同
-
html是用來顯示數據的;xml是用來描述數據、存放數據的,所以可以作爲持久化的介質。
-
xml設計的焦點是數據的內容。html設計的焦點是數據的外觀。
-
xml不是html的替代品,xml和html是兩種不同用途的語言。
-
對於xml最好的描述可能是:xml是一種跨平臺的,與軟硬件無關的、處理與傳輸信息的工具。
3. XML的節點關係
(1)父節點(Parent)
每個元素以及屬性都有一個父節點。
下面是一個簡單的XML例子中,book 元素是 title、author、year 以及 price 元素的父節點:
(2)子節點(Children)
元素節點可有零個、一個或多個子節點。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子節點:
(3)同胞(Sibling)
擁有相同的父節點。
在下面的例子中,title、author、year 以及 price 元素都是同胞:
(4)先輩(Ancestor)
某節點的父節點、父節點的父節點,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:
(5)後代(Descendant)
某個節點的子節點,子節點的子節點,等等。
在下面的例子中,bookstore 的後代是 book、title、author、year 以及 price 元素:
二、XPATH
1. 什麼是XPath
XPATH是一種語法,用來提取html或者XML頁面內容的語法
XPath (XML Path Language) 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。
W3School官方文檔:http://www.w3school.com.cn/xpath/index.asp
2. XPATH語法內容
必備知識:
語法知識 | 含義 |
---|---|
元素 | 指一個xml的標籤以及標籤的所有內容 |
屬性 | class,name |
標籤 | 和元素一樣 |
內容 | 標籤包括的文本內容 如a標籤的內容就是aaaa(不包括b標籤),b標籤的內容就是bbbb; <a>aaaa<b>bbbb</b></a> |
1. 選取節點
XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集。這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。
下面列出了最常用的路徑表達式:
表達式 | 描述 |
---|---|
nodename | 選取此標籤(節點)的所有子標籤(節點) |
/ | 從根節點開始選取 |
// | 從任意位置開始選取 |
. | 選取當前節點 |
.. | 選取當前節點的父節點 |
@ | 選取屬性 |
text() | 選取標籤當中的值(內容) |
實例:
詳解
2. 謂語
英語中謂語用來限定
XPATH的謂語也是限定選取內容的
接上圖
路徑 | 表達式語義 |
---|---|
/bookstore/book[1] | 表示取bookstroe下面的第一個book標籤 |
/bookstore/book[last()] | 表示取bookstroe下面的最後一個book標籤 |
/bookstore/book[last()-1] | 表示取bookstroe下面倒數第二個book標籤 |
/bookstore/book[position()>1] | 跳過第一本書,選取第二本以及第二本以後的書 |
/bookstore/book[position()<2] | 選取第一本書,第二本書以前的書 |
總結:謂語用來查找某個特定的節點或者包含某個指定的值的節點,被嵌在方括號中。
3. 選取未知節點
通配符 | 描述 |
---|---|
@* | 匹配任意屬性的節點(匹配任何屬性) |
* | 匹配任意元素的節點 |
node() | 匹配任何類型的節點 |
在下面的表格中,列出了一些路徑表達式,以及這些表達式的結果:
4. 選取若干路徑
通過在路徑表達式中使用“|”運算符,您可以選取若干個路徑。在下面的表格中,列出了一些路徑表達式,以及這些表達式的結果:
5. XPath的運算符
下面列出了可用在 XPath 表達式中的運算符
注意:這些就是XPath的語法內容,在運用到Python抓取時要先轉換爲xml。