python爬蟲 如何解析json檔案 json檔案的解析提取和jsonpath的應用
阿新 • • 發佈:2019-02-18
這是通過抓包工具抓取到的json檔案
然後json檔案線上解析,把內容複製貼上進去解析得出下面的內容(右邊框內)
json檔案的地址url="http://www.lagou.com/lbs/getAllCitySearchLabels.json"
用python來解析 並提取出其中的城市名
程式碼如下:
#coding:utf8 import urllib2 #json解析庫,對應到lxml import json #json的解析語法,對應到xpath import jsonpath url="http://www.lagou.com/lbs/getAllCitySearchLabels.json" header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0"} request=urllib2.Request(url,headers=header) response=urllib2.urlopen(request) #取出json檔案裡的內容,返回的格式是字串 html=response.read() #把json形式的字串轉換成python形式的Unicode字串 unicodestr=json.loads(html) #python形式的列表 city_list=jsonpath.jsonpath(unicodestr,"$..name") #列印每個城市 for i in city_list: print i #dumps()預設中文偉ascii編碼格式,ensure_ascii預設為Ture #禁用ascii編碼格式,返回Unicode字串 array=json.dumps(city_list,ensure_ascii=False) #把結果寫入到lagouCity.json檔案中 with open("lagouCity.json","w") as f: f.write(array.encode("utf-8"))
列印結果如下圖:
。
。
。
————————————————————《分割線》——————————————————
另外再寫個簡單的流程案例:
import requests import json import jsonpath url='http://baijiajiekuan.oss-cn-shanghai.aliyuncs.com/mongo/risk/original/data/20180206/04b94dac3ed84922b6d53c85514e700c.txt' response=requests.get(url) # 輸出編碼格式 # print(response.apparent_encoding) # 解碼 response.encoding='utf8' # 讀取reponse html=response.text # print(html) # 把json格式字串轉換成python物件 html=json.loads(html) # print(html) # 獲取score節點下的資料 qq=jsonpath.jsonpath(html,'$..score') print(qq)
JsonPath與XPath語法對比:
Json結構清晰,可讀性高,複雜度低,非常容易匹配,下表中對應了XPath的用法。
XPath | JSONPath | 描述 |
---|---|---|
/ | $ | 根節點 |
. | @ | 現行節點 |
/ | . or[] | 取子節點 |
.. | n/a | 取父節點,Jsonpath未支援 |
// | .. | 就是不管位置,選擇所有符合條件的條件 |
* | * | 匹配所有元素節點 |
@ | n/a | 根據屬性訪問,Json不支援,因為Json是個Key-value遞迴結構,不需要。 |
[] | [] | 迭代器標示(可以在裡邊做簡單的迭代操作,如陣列下標,根據內容選值等) |
| | [,] | 支援迭代器中做多選。 |
[] | ?() | 支援過濾操作. |
n/a | () | 支援表示式計算 |
() | n/a | 分組,JsonPath不支援 |