數據解析之XPath & lxml庫

XPath

  • 定義

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

  • 開發工具

    • Chrome 在Chrome的應用商店搜索XPath Helper,而後安裝這個插件便可; imagenode

    • Firefox 一樣的方式,在應用中心查找XPath Checker,而後安裝這個插件便可,因爲未使用Firefox,便再也不演示;python

  • 語法

    • 節點選取

| 表達式 | 描述 | 示例 | |--|--|--| | nodename|選詞當前節點下節點的全部子節點 | div | | / | 若在最前,則表示從根節點開始選取,不然選擇某節點下的某個節點 | /div | | // | 從全局節點中選取某一節點所在全部位置 | //div | | @ | 選取某一節點屬性 | //div[@color] |shell

  • 謂語
路徑表達式 描述
/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庫,介紹了它們的安裝方式和簡單的使用方式,若是你有更好的建議和想法,歡迎留言指正。工具

相關文章
相關標籤/搜索