python网络爬虫系列(五)——数据提取 jsonpath模块
一、數(shù)據(jù)提取概述
知識(shí)點(diǎn)
- 了解 響應(yīng)內(nèi)容的分類
- 了解 xml和html的區(qū)別
1. 響應(yīng)內(nèi)容的分類
在發(fā)送請(qǐng)求獲取響應(yīng)之后,可能存在多種不同類型的響應(yīng)內(nèi)容;而且很多時(shí)候,我們只需要響應(yīng)內(nèi)容中的一部分?jǐn)?shù)據(jù)
-
結(jié)構(gòu)化的響應(yīng)內(nèi)容
-
json字符串
- 可以使用re、json等模塊來提取特定數(shù)據(jù)
- json字符串的例子如下圖
-
xml字符串
-
可以使用re、lxml等模塊來提取特定數(shù)據(jù)
-
xml字符串的例子如下
<bookstore> <book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
-
-
-
非結(jié)構(gòu)化的響應(yīng)內(nèi)容
-
html字符串
- 可以使用re、lxml等模塊來提取特定數(shù)據(jù)
- html字符串的例子如下圖
-
知識(shí)點(diǎn):了解 響應(yīng)內(nèi)容的分類
2. 認(rèn)識(shí)xml以及和html的區(qū)別
要搞清楚html和xml的區(qū)別,首先需要我們來認(rèn)識(shí)xml
2.1 認(rèn)識(shí)xml
xml是一種可擴(kuò)展標(biāo)記語言,樣子和html很像,功能更專注于對(duì)傳輸和存儲(chǔ)數(shù)據(jù)
<bookstore> <book category="COOKING"><title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"><title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"><title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>上面的xml內(nèi)容可以表示為下面的樹結(jié)構(gòu):
2.2 xml和html的區(qū)別
二者區(qū)別如下圖
- html:
- 超文本標(biāo)記語言
- 為了更好的顯示數(shù)據(jù),側(cè)重點(diǎn)是為了顯示
- xml:
- 可擴(kuò)展標(biāo)記語言
- 為了傳輸和存儲(chǔ)數(shù)據(jù),側(cè)重點(diǎn)是在于數(shù)據(jù)內(nèi)容本身
知識(shí)點(diǎn):了解 xml和html的區(qū)別
2.3 常用數(shù)據(jù)解析方法
據(jù),側(cè)重點(diǎn)是為了顯示
- xml:
- 可擴(kuò)展標(biāo)記語言
- 為了傳輸和存儲(chǔ)數(shù)據(jù),側(cè)重點(diǎn)是在于數(shù)據(jù)內(nèi)容本身
知識(shí)點(diǎn):了解 xml和html的區(qū)別
2.3 常用數(shù)據(jù)解析方法
二、數(shù)據(jù)提取-jsonpath模塊
知識(shí)點(diǎn)
- 了解 jsonpath模塊的使用場(chǎng)景
- 掌握 jsonpath模塊的使用
1. jsonpath模塊的使用場(chǎng)景
如果有一個(gè)多層嵌套的復(fù)雜字典,想要根據(jù)key和下標(biāo)來批量提取value,這是比較困難的。jsonpath模塊就能解決這個(gè)痛點(diǎn),接下來我們就來學(xué)習(xí)jsonpath模塊
jsonpath可以按照key對(duì)python字典進(jìn)行批量數(shù)據(jù)提取
知識(shí)點(diǎn):了解 jsonpath模塊的使用場(chǎng)景
2. jsonpath模塊的使用方法
2.1 jsonpath模塊的安裝
jsonpath是第三方模塊,需要額外安裝
pip install jsonpath
2.2 jsonpath模塊提取數(shù)據(jù)的方法
from jsonpath import jsonpath ret = jsonpath(a, 'jsonpath語法規(guī)則字符串')2.3 jsonpath語法規(guī)則
2.4 jsonpath使用示例
book_dict = { "store": {"book": [ { "category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{ "category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{ "category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{ "category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}} }from jsonpath import jsonpathprint(jsonpath(book_dict, '$..author')) # 如果取不到將返回False # 返回列表,如果取不到將返回False3. jsonpath練習(xí)
我們以拉勾網(wǎng)城市JSON文件 http://www.lagou.com/lbs/getAllCitySearchLabels.json 為例,獲取所有城市的名字的列表,并寫入文件。
參考代碼:
import requests import jsonpath import json# 獲取拉勾網(wǎng)城市json字符串 url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json' headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"} response =requests.get(url, headers=headers) html_str = response.content.decode()# 把json格式字符串轉(zhuǎn)換成python對(duì)象 jsonobj = json.loads(html_str)# 從根節(jié)點(diǎn)開始,獲取所有key為name的值 citylist = jsonpath.jsonpath(jsonobj,'$..name')# 寫入文件 with open('city_name.txt','w') as f:content = json.dumps(citylist, ensure_ascii=False)f.write(content)知識(shí)點(diǎn):掌握 jsonpath模塊的使用
ent = json.dumps(citylist, ensure_ascii=False)
f.write(content)
總結(jié)
以上是生活随笔為你收集整理的python网络爬虫系列(五)——数据提取 jsonpath模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 论文阅读 - Beat Tracking
- 下一篇: 五、实例:在波士顿房价数据集上用随机森林