Python JSON New York Times API - PullRequest
       14

Python JSON New York Times API

2 голосов
/ 22 февраля 2010

Действительно новичок в Python и получение данных из Интернета, так что все готово.

Мне удалось извлечь данные из API NYT и проанализировать вывод JSON в файл CSV.Однако, в зависимости от моего поиска, я могу получить следующую ошибку при попытке записать строку в CSV.

UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позиции 20-21:символ сопоставляется с

Этот URL содержит данные , которые я пытаюсь проанализировать в CSV.(Я снял флажок «Печатать красивые результаты»)

Я почти уверен, что ошибка происходит рядом с заголовком: «Spitzer .......»

Я пытался найтив Интернете, но я не могу получить ответ.Я не очень много знаю о кодировании, но я предполагаю, что данные, которые я получаю из записей JSON, каким-то образом кодируются.

Любая помощь, которую вы можете оказать, будет принята с благодарностью.

Заранее большое спасибо,

Брок

Ответы [ 4 ]

2 голосов
/ 02 марта 2010

Вам необходимо проверить заголовки HTTP, чтобы увидеть, какую кодировку символов они используют при возврате результатов. Я держу пари, что все закодировано как utf-8, и когда вы пытаетесь записать в CSV, вы неявно кодируете вывод как ascii.

Используемого ими символа нет в наборе символов ascii. Вы можете перехватить исключение UnicodeError.

Следуйте золотым правилам кодирования .

  1. Раннее декодирование в юникод (data.decode ('utf-8', 'ignore'))

  2. Используйте Юникод для внутреннего использования.

  3. Позднее кодирование - во время вывода - data.encode ('ascii', 'ignore'))

Возможно, вы можете настроить свой CSV-писатель на использование кодировки utf-8 при записи.

Примечание: вы должны действительно увидеть, какую кодировку они вам дают, прежде чем вслепую использовать utf-8 для всего.

0 голосов
/ 08 марта 2013

Будьте осторожны с API nytimes - он не предоставляет вам полный текст.

0 голосов
/ 22 февраля 2010

Кажется, что он пытается декодировать '/', который используется всякий раз, когда используется слеш. Этого можно избежать, используя строковую функцию.

str('http:\/\/www.nytimes.com\/2010\/02\/17\/business\/global\/17barclays.html')
'http:\\/\\/www.nytimes.com\\/2010\\/02\\/17\\/business\\/global\\/17barclays.html'

оттуда вы можете использовать заменить.

str('http:\/\/www.nytimes.com\/2010\/02\/17\/business\/global\/17barclays.html').replace('\\', "")
0 голосов
/ 22 февраля 2010

Каждый фрагмент текстовых данных кодируется. Трудно сказать, в чем проблема без какого-либо кода, поэтому единственный совет, который я могу дать сейчас: попробуйте расшифровать ответ перед его синтаксическим анализом ...

resp = do_request()
## look on the nyt site if they mention the encoding used and use it instead.
decoded = resp.decode('utf-8')
parsed = parse( decoded )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...