1. 程式人生 > >利用urllib讀取JSON,然後將JSON解析為Python物件 —— python學習筆記

利用urllib讀取JSON,然後將JSON解析為Python物件 —— python學習筆記

1. 題目:

請利用urllib讀取JSON,然後將JSON解析為python物件:
題目的意思是使用urllib訪問一個介面,這個介面會放回json格式的資料,請將這一資料解析成python物件。
題目是廖雪峰老師的python教程中urllib的練習。
本篇博文只是針對這一題目,沒有做詳細的介紹,如果看不懂可以在下面評論問我,我會及時回覆的。

2. 程式碼如下:

首先需要提到的是,在廖雪峰老師的練習測試中所給出的url是已經無法訪問了的,因此很多同學在測試過程中一直無法測試成功,那麼在本博文中就更換了一個url,這個url同樣返回一個json格式的資料。

2.1 我個人的解法

from urllib import request
import json

def fetch_data(url):
    req = request.Request(url)  # 請求url(GET請求)
    with request.urlopen(req) as f:     # 開啟url請求(如同開啟本地檔案一樣)
        return json.loads(f.read().decode('utf-8'))  # 讀資料 並編碼同時利用json.loads將json格式資料轉換為python物件

# 測試
URL = 'http://m.maoyan.com/ajax/movieOnInfoList?token='
data = fetch_data(URL) print(data) assert data['stid']== '576591972453269000' print('ok')
"這是測試結果"
{'coming': [], 'movieIds': [1206875, 1240159, 345172, 249342, 1212512, 1174518, 1204476, 1229697, 123, 345655, 1235560, 341229, 1200265, 1218253, 341989, 1229768, 1249199, 1248656, 345036, 1238862, 1196131,
1217351, 1244914, 1189514, 1229963, 1212949, 1132519, 1133207, 42964, 1208282, 1238834, 1215919, 1246861, 344649, 1229950, 346465, 342165, 1233373, 1238950, 1233852, 78732, 78480, 345918, 1228750, 1219776], 'stid': '576591972453269000', 'stids': [{'movieId': 1206875, 'stid': '576591972453269000_a1206875_c0'}, {'movieId': 1240159, 'stid': '576591972453269000_a1240159_c1'}, {'movieId': 345172, 'stid': '576591972453269000_a345172_c2'}, {'movieId': 249342, 'stid': '576591972453269000_a249342_c3'}, {'movieId': 1212512, 'stid': '576591972453269000_a1212512_c4'}, {'movieId': 1174518, 'stid': '576591972453269000_a1174518_c5'}, {'movieId': 1204476, 'stid': '576591972453269000_a1204476_c6'}, {'movieId': 1229697, 'stid': '576591972453269000_a1229697_c7'}, {'movieId': 123, 'stid': '576591972453269000_a123_c8'}, {'movieId': 345655, 'stid': '576591972453269000_a345655_c9'}, {'movieId': 1235560, 'stid': '576591972453269000_a1235560_c10'}, {'movieId': 341229, 'stid': '576591972453269000_a341229_c11'}], 'total': 45, 'movieList': [{'id': 1206875, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/426f1f3f1b145f763b75a60c7c39c44a535093.jpg', 'version': 'v3d imax', 'nm': '大黃蜂', 'preShow': False, 'sc': 9.2, 'globalReleased': True, 'wish': 169967, 'star': '海莉·斯坦菲爾德,約翰·塞納,小豪爾赫·蘭登伯格', 'rt': '2019-01-04', 'showInfo': '今天218家影院放映4845場', 'showst': 3, 'wishst': 0}, {'id': 1240159, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/a596474c1c29118d908d1eff0fd4293f1017066.jpg', 'version': '', 'nm': '來電狂響', 'preShow': False, 'sc': 8.7, 'globalReleased': True, 'wish': 70498, 'star': '佟大為,馬麗,霍思燕', 'rt': '2018-12-28', 'showInfo': '今天211家影院放映1580場', 'showst': 3, 'wishst': 0}, {'id': 345172, 'haspromotionTag': False, 'img': 'http://p0.meituan.net/w.h/movie/c02cf9ad1f2ddfd128069738f341de53882285.jpg', 'version': '', 'nm': '奎迪:英雄再起', 'preShow': False, 'sc': 8.9, 'globalReleased': True, 'wish': 13862, 'star': '邁克爾·B·喬丹,西爾維斯特·史泰龍,泰莎·湯普森', 'rt': '2019-01-04', 'showInfo': '今天191家影院放映676場', 'showst': 3, 'wishst': 0}, {'id': 249342, 'haspromotionTag': False, 'img': 'http://p0.meituan.net/w.h/movie/c106904da68edd848afd4a320976d051346321.jpg', 'version': 'v3d imax', 'nm': '海王', 'preShow': False, 'sc': 9.4, 'globalReleased': True, 'wish': 250996, 'star': '傑森·莫瑪,艾梅柏·希爾德,妮可·基德曼', 'rt': '2018-12-07', 'showInfo': '今天186家影院放映673場', 'showst': 3, 'wishst': 0}, {'id': 1212512, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/bb84bede1711265dab1136f7a3dddc782801232.jpg', 'version': 'v3d imax', 'nm': '蜘蛛俠:平行宇宙', 'preShow': False, 'sc': 8.7, 'globalReleased': True, 'wish': 105401, 'star': '彭昱暢,沙梅克·摩爾,傑克·M·約翰森', 'rt': '2018-12-21', 'showInfo': '今天185家影院放映577場', 'showst': 3, 'wishst': 0}, {'id': 1174518, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/f8a129b3561bf6f726c591dfb78a698d1631786.jpg', 'version': '', 'nm': '“大”人物', 'preShow': True, 'sc': 0, 'globalReleased': False, 'wish': 17295, 'star': '王千源,包貝爾,王迅', 'rt': '2019-01-11', 'showInfo': '2019-01-11 下週五上映', 'showst': 4, 'wishst': 0}, {'id': 1204476, 'haspromotionTag': False, 'img': 'http://p0.meituan.net/w.h/movie/84f5bb5f7fb0191298d0e3e734b0fde64754356.jpg', 'version': '', 'nm': '印度暴徒', 'preShow': False, 'sc': 8.2, 'globalReleased': True, 'wish': 26894, 'star': '阿米爾·汗,阿米特巴·巴強,法緹瑪·薩那·紗卡', 'rt': '2018-12-28', 'showInfo': '今天84家影院放映198場', 'showst': 3, 'wishst': 0}, {'id': 1229697, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/5e8ddac4b2fc796cc3037d66d6e709ad395098.jpg', 'version': '', 'nm': '四個春天', 'preShow': False, 'sc': 9.2, 'globalReleased': True, 'wish': 8089, 'star': '陸運坤,李桂賢', 'rt': '2019-01-04', 'showInfo': '今天103家影院放映162場', 'showst': 3, 'wishst': 0}, {'id': 123, 'haspromotionTag': False, 'img': 'http://p0.meituan.net/w.h/movie/c304c687e287c7c2f9e22cf78257872d277201.jpg', 'version': '', 'nm': '龍貓', 'preShow': False, 'sc': 9.2, 'globalReleased': True, 'wish': 155821, 'star': '秦嵐,糸井重裡,島本須美', 'rt': '2018-12-14', 'showInfo': '今天62家影院放映159場', 'showst': 3, 'wishst': 0}, {'id': 345655, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/622e9f9a8b96ab69c02b351f48d147fd1188553.jpg', 'version': 'v3d imax', 'nm': '雲南蟲谷', 'preShow': False, 'sc': 5.1, 'globalReleased': True, 'wish': 162779, 'star': '蔡珩,顧璇,於恆', 'rt': '2018-12-29', 'showInfo': '今天76家影院放映159場', 'showst': 3, 'wishst': 0}, {'id': 1235560, 'haspromotionTag': False, 'img': 'http://p1.meituan.net/w.h/movie/018e4a9c9c88cbb9d32ca889a65be9ff4514904.jpg', 'version': '', 'nm': '白蛇:緣起', 'preShow': True, 'sc': 0, 'globalReleased': False, 'wish': 51209, 'star': '楊天翔,張喆,張遙函', 'rt': '2019-01-11', 'showInfo': '今天14家影院放映14場', 'showst': 4, 'wishst': 0}, {'id': 341229, 'haspromotionTag': False, 'img': 'http://p0.meituan.net/w.h/movie/9ef2613395eed698322cdc46ca3f34072433474.jpg', 'version': '', 'nm': '命運之夜——天之杯:惡兆之花', 'preShow': False, 'sc': 0, 'globalReleased': False, 'wish': 33786, 'star': '杉山紀彰,下屋則子,植田佳奈', 'rt': '2019-01-11', 'showInfo': '2019-01-11 下週五上映', 'showst': 4, 'wishst': 0}]} ok

希望能夠幫助到大家,有什麼問題可以 直接評論即可,如果不夠詳細的話也可以說,我會及時回覆的。