Python爬蟲筆記3-解析庫Xpath的使用

當爬取到Html數據後,可以用正則對數據進行提取,但有時候正則表達式編寫起來不方便,而且萬一寫錯了,可能導致匹配失敗。這時候就需要藉助其他解析工具了。

XML引入

什麼是XML?

  • XML 指可擴展標記語言(EXtensible Markup Language)
  • XML 是一種標記語言,很類似 HTML
  • XML 的設計宗旨是傳輸數據,而非顯示數據
  • XML 的標籤需要我們自行定義。
  • XML 被設計爲具有自我描述性。
  • XML 是 W3C 的推薦標準

W3School官方文檔:http://www.w3school.com.cn/xm...

XML和HTML的區別

語法要求不同

  • 在html中不區分大小寫,在xml中嚴格區分。
  • 在HTML中,有時不嚴格,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略</p>或者</li>之類的結束標記。在XML中,是嚴格的樹狀結構,絕對不能省略掉結束標記。
  • 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個/ 字符作爲結尾。這樣分析器就知道不用查找結束標記了。
  • 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
  • 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
  • 在XML文檔中,空白部分不會被解析器自動刪除;但是html是過濾掉空格的。

設計目標不同

  • XML被設計爲傳輸和存儲數據,其焦點是數據的內容。
  • HTML顯示數據以及如何更好顯示數據。

XML的節點關係

1、父(parent)
每個元素以及屬性都有一個父。
下面是一個簡單的XML例子中,book 元素是 title、author、year 以及 price 元素的父:

<?xml version="1.0" encoding="utf-8"?>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

2、 子(Children)
元素節點可有零個、一個或多個子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

<?xml version="1.0" encoding="utf-8"?>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

3、 同胞(Sibling)
擁有相同的父的節點
在下面的例子中,title、author、year 以及 price 元素都是同胞:

<?xml version="1.0" encoding="utf-8"?>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

4、 先輩(Ancestor)
某節點的父、父的父,等等。
在下面的例子中,title 元素的先輩是 book 元素和 bookstore 元素:

<?xml version="1.0" encoding="utf-8"?>

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

5、 後代(Descendant)
某個節點的子,子的子,等等。
在下面的例子中,bookstore 的後代是 book、title、author、year 以及 price 元素:

<?xml version="1.0" encoding="utf-8"?>

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>

Xpath

什麼是Xpath?

Xpath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。。最初是用來搜尋XML文檔的,但是它也適用與HTML文檔的搜索。
所以在做爬蟲時,可以使用XPath來做相應的信息抽取。

W3School官方文檔:http://www.w3school.com.cn/xp...

Xpath開發工具

  1. 開源的XPath表達式編輯工具:XMLQuire(XML格式文件可用)
  2. Chrome插件 XPath Helper
  3. Firefox插件 XPath Checker

使用Xpath

XPath 使用路徑表達式來選取 XML 文檔中的節點或者節點集。這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。
1、Xpath常用規則

表達式 描述
nodename 選取此節點的所有子節點
/ 從當前節點選取直接子節點
// 從當前節點選取子孫節點
. 選取當前節點
.. 選取當前節點的父節點
@ 選取屬性

2、Xpath使用示例
以下面xmL文檔爲例:

<?xml version="1.0" encoding="utf-8"?>

<bookstore>

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

</bookstore>
路徑表達式 結果
bookstore 選取bookstore元素的所有子節點
/bookstore 選取根元素bookstore。注:假如路徑起始於正斜槓/,則此路徑代表某元素的絕對路徑
bookstore/book 選取屬於bookstore的子元素的所有book元素
//book 選取所有book元素,不管在文檔的任何位置
bookstore//book 選擇屬於 bookstore 元素的後代的所有 book 元素,而不管它們位於 bookstore 之下的什麼位置。
//@lang 選取名爲lang的所有屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章