1. 程式人生 > >資料解析之XPath & lxml庫

資料解析之XPath & lxml庫

XPath

  • 定義

即XML路徑語言(XML Path Language),是一種用來確定XML文件中某部分位置的語言,它基於XML的樹狀結構,提供在資料結構樹中尋找節點的能力,也適用於HTML文件中;

  • 開發工具

    • Chrome
      在Chrome的應用商店搜尋XPath Helper,然後安裝這個外掛即可;

    • Firefox
      同樣的方式,在應用中心查詢XPath Checker,然後安裝這個外掛即可,由於未使用Firefox,便不再演示;

  • 語法

    • 節點選取
表示式 描述 示例
nodename 選詞當前節點下節點的所有子節點 div
/ 若在最前,則表示從根節點開始選取,否則選擇某節點下的某個節點 /div
// 從全域性節點中選取某一節點所在所有位置 //div
@ 選取某一節點屬性 //div[@color]
  • 謂語
路徑表示式 描述
/markstore/mark[1] 選取markstore下第一個元素
/markstore/mark[last()] 選取markstore下倒數第二個mark元素
markstore/mark[position()<5] 選取markstore下前四個子元素
//mark[@id] 選取擁有id的mark元素
//mark[@id=‘k’] 選取id屬性為k的mark元素
  • 萬用字元
萬用字元 描述
* 匹配任意節點
@* 匹配節點中的任意屬性

注意事項

  • 使用方式://獲取當前頁面所有元素,然後寫標籤名,最後寫謂詞進行提取;
  • /和//的區別:/代表只獲取直接子節點,//代表獲取子孫節點;

lxml庫

安裝

使用如下命令安裝即可,

pip install lxml

使用

from lxml import etree

text = '''
<div>
    <ul>
        <li class="id-1"><a href="www.baidu.com">baidu</a></li>
        <li class="id-2"><a href="www.google.com">Google</a></li>
    </ul>
</div>
'''
# 解析字串為html文件 html = etree.HTML(text) # 字串序列化為html文件 result = etree.tostring(html, encoding='utf-8') print(result.decode('utf-8')) # 從檔案讀取 parser = etree.HTMLParser(encoding='utf-8') html = etree.parse('csdn.html', parser=parser) # 獲取所有a標籤的href屬性 aList = html.xpath('//a/@href') for a in aList: print(a)

總結

本文主要介紹了爬蟲中資料解析時所需要的用的XPath和lxml庫,介紹了它們的安裝方式和簡單的使用方式,如果你有更好的建議和想法,歡迎留言指正。