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開發工具
- 開源的XPath表示式編輯工具:XMLQuire(XML格式檔案可用)
- Chrome外掛 XPath Helper
- 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的所有屬性 |