virtual_universe
@virtual_universe
Питонист:)

Как починить юникоднутый JSON в питоне?

Если говорить просто то мне необходимо получить информацию, К сожалению я не знаю двигаюсь ли я в правильную сторону. Поэтому вместо того что-бы задавать вопросы как перекодировать это страницу если decode("utf-8) не работают. Лучше я спрошу прямо, как получить данные которые можно парсить с этой страницы.
Интересует решение на питоне, вот что смог сделать я. Заранее спасибо.

# -*- coding: utf-8 -*- ?
import requests
import json

def GetJSON(word):
	url = "https://ru.wiktionary.org//w/api.php?action=query&titles=%s&prop=revisions&rvprop=content&format=json"
	url = url%word
	answ = requests.get(url).text
	data = json.load(answ)
	return data
print(GetJSON("кот"))

PS гиперссылка не работает-почему то, просто скопируйте это
https://ru.wiktionary.org/w/api.php?action=query&titles=%D0%BA%D0%BE%D1%82&prop=revisions&rvprop=content&format=json

Решено!
Решение:
# coding: utf-8
import requests
def WikiSearch(word):
	req = requests.get('https://ru.wiktionary.org/w/api.php?action=query&titles=%s&prop=revisions&rvprop=content&format=json' % word)
	req = req.json()["query"]["pages"]
	
	for key in req: 
		if key == "-1": return None #404 page not found
		req = str(req[key]["revisions"])
	a = req.find("слогам")+6
	req = req[a:a+req[a:].find("}")]
	req = req.replace("\u0301","'")
	req = req.replace("|","")
	return req
print(WikiSearch(input()))

Программа выводит слово с ударением.
  • Вопрос задан
  • 1996 просмотров
Решения вопроса 2
GavriKos
@GavriKos
К сожалению примером именно с урлом нет, но есть код загрузки джсона с файла, кодировка UTF-8, и содержимое файла на русском. Вот:
def LoadJson(filname):
    if os.path.isfile(filname) is False:
        return None
    data_file = open(filname, "r")
    str = data_file.read()
    data_file.close()
    data = json.loads(str)
    str = json.dumps(data, ensure_ascii=False, indent=4)
    return json.loads(str)


Думаю последние три строки - это то на что вам нужно обратить внимание. После вот такого шаманства - все работало. Возможно можно как то проще, не разбирал особо.
Ответ написан
sim3x
@sim3x
from json import loads
import requests

w = 'кот'
d = requests.get('https://ru.wiktionary.org/w/api.php?action=query&titles=%s&prop=revisions&rvprop=content&format=json' % w)
print(loads(d.text))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
Комментировать
smorman
@smorman
When In Rome do as The Romans do...
Я справился таким образом:
Починка юникоднутого JSON в питоне
import json
import requests

ace_data = requests.get('https://api.aceхххх.хх/хххххххххххххххх_api_key').content.decode('unicode-escape', 'ignore')
ace_json = json.dumps(ace_data)
ace_json_load = json.loads(ace_json)
print(ace_json_load)

Т.е. к:
requests.get('url')
добавляем:
.content.decode('unicode-escape', 'ignore')
и получаем великолепный вывод кирилицы, как и положено!

А если убрать из:
requests.get
ace_data = requests.get('https://api.aceхххх.хх/хххххххххххххххх_api_key').content.decode('unicode-escape', 'ignore')
.content.decode('unicode-escape', 'ignore')
то естесно будет вывод кирилицы в полном г..., типа:
\u04e7
хотя и utf-8
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы