使用jsonpath快速提取json的資料

松鼠q發表於2024-10-04

jsonpath對於json相當於xpath對於xml,jsonpath提供多種語言實現版本包括python,javascript,php和java等,jsonpath是第三方庫,需要安裝,cmd中輸入pip install jsonpath

安裝後輸入pip show jsonpath可檢視詳細資訊(官網https://goessner.net/articles/JsonPath/

Name: jsonpath
Version: 0.82.2
Summary: An XPath for JSON
Home-page: http://www.ultimate.com/phil/python/#jsonpath
Author: Phil Budne
Author-email: phil@ultimate.com
License: MIT
Location: C:\Users\89660\AppData\Local\Programs\Python\Python312\Lib\site-packages
Requires:
Required-by:

jsonpath使用非常簡單,jsonpath.jsonpath(expr)是jsonpath庫的核心函式,用於執行jsonpath表示式:

使用jsonpath快速提取json的資料

縱橫中文網推薦榜的資料就是以json檔案儲存,由上節(22)得知頁面資料得請求方法為post。

使用jsonpath快速提取json的資料

向使用urllib獲取json原始碼,再使用jsonpath提取第一頁json檔案的小說名與作者資訊,執行程式碼如下:

from urllib.request import Request, urlopen
from urllib.parse import urlencode
from fake_useragent import UserAgent
from jsonpath import jsonpath
import json


# 請求地址
url = 'https://www.zongheng.com/api/rank/details'
# 偽裝請求頭
headers = {'User-Agent': UserAgent().chrome}
# 封裝post引數
data = {
    'cateFineId': '0',
    'cateType': '0',
    'pageNum': '1',
    'pageSize': '20',
    'period': '0',
    'rankType': '6'
}
data = urlencode(data).encode()
# 封裝Request物件
req = Request(url, data=data, headers=headers)
# 傳送請求
resp = urlopen(req)
# 獲取響應內容
print(resp.read().decode())
# 把json格式字串轉換為python物件(解碼/反序列)
obj = json.loads(resp.read().decode())
# 匹配bookName節點和pseudonym節點
bookName = jsonpath(obj, '$..bookName')
pseudonym = jsonpath(obj, '$..pseudonym')
print(type(bookName), type(pseudonym))
for i, n in zip(bookName, pseudonym):
    print(f'作者: {n}, 書名: {i}')
print(bookName)

執行結果:

<class 'list'> <class 'list'>
作者: 隨散飄風, 書名: 踏星
作者: 火星引力, 書名: 逆天邪神
作者: 烽火戲諸侯, 書名: 劍來
作者: 知白, 書名: 天下長寧
作者: 更俗, 書名: 新官路商途
作者: 青鸞峰上, 書名: 無敵天命
作者: 減肥專家, 書名: 星辰之主
作者: 無罪, 書名: 割鹿記
作者: 我愛小豆, 書名: 灰燼領主
作者: 鐵馬飛橋, 書名: 太荒吞天訣
作者: 鳥川鳴, 書名: 好戲登場
作者: 沙漠, 書名: 絕色生驕
作者: 烈焰滔滔, 書名: 最強戰神
作者: 晨星天使, 書名: 問鼎:從一等功臣到權力巔峰
作者: 莫問江湖, 書名: 過河卒
作者: 曳光, 書名: 凡徒
作者: 浪跡天涯覓卿歸, 書名: 弒神仙尊
作者: 太極陰陽魚, 書名: 末日崛起
作者: 菸斗老哥, 書名: 醫路青雲
作者: 六如和尚, 書名: 陸地鍵仙

相關文章