資料解析之XPath & lxml庫
阿新 • • 發佈:2019-01-10
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庫,介紹了它們的安裝方式和簡單的使用方式,如果你有更好的建議和想法,歡迎留言指正。