Как из JSON получить url если один из элементов меняет свое значение?
import json
import requests
url = 'https://en.wikipedia.org/w/api.php?action=query&titles=50_Cent&prop=pageimages&format=json&pithumbsize=500'
response = requests.get(url, headers={'User_Agent': UserAgent().chrome})
# Если код ответа сервера 200 (сервер доступен)
if response.status_code == 200:
a = json.loads(response)
html = response.text #.content ТЕКСТ
print (html)
print (a)
как вытащить "https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/50_Cent.jpg/394px-50_Cent.jpg" в переменную, если pageid для каждой другой страницы другой (другого url)?
{"batchcomplete":"","query":{"normalized":[{"from":"50_Cent","to":"50 Cent"}],"pages":{"192481":{"pageid":192481,"ns":0,"title":"50 Cent","thumbnail":{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/50_Cent.jpg/394px-50_Cent.jpg","width":394,"height":500},"pageimage":"50_Cent.jpg"}}}}
или по другому:
{
"batchcomplete":"",
"query":{
"normalized":[],
"pages":{
"192481":{
"pageid":192481,
"ns":0,
"title":"50 Cent",
"thumbnail":{
"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/50_Cent.jpg/394px-50_Cent.jpg",
"width":394,
"height":500
},
"pageimage":"50_Cent.jpg"
}
}
}
}
Ответы (2 шт):
Автор решения: Denis640Kb
→ Ссылка
Пожалуй не самый лучший вариант, но рабочий.
Можно так(даже, если подобных pageid может быть несколько)
bz = {
"batchcomplete":"",
"query":{
"normalized":[],
"pages":{
"192481":{
"pageid":192481,
"ns":0,
"title":"50 Cent",
"thumbnail":{
"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/6/64/50_Cent.jpg/394px-50_Cent.jpg",
"width":394,
"height":500
},
"pageimage":"50_Cent.jpg"
}
}
}
}
for key in bz['query']['pages']:
print(bz['query']['pages'][key]['thumbnail']['source'])
Автор решения: Wairua
→ Ссылка
сначала pip install jsonpath-ng
потом:
from jsonpath_ng import parse, jsonpath
import json
if __name__ == '__main__':
# Этот блок вы меняете на свой где получаете json в переменную
with open('./test.json', 'r') as j_file:
jfile = json.load(j_file)
# ===============================================================
j_exp = parse('$..source')
for source in j_exp.find(jfile):
print(source.value)
материал по библиотеке
jsonpath-ng