2010-02-21 3 views
2

Действительно новый для Python и получение данных из Интернета, так что вот оно.Python JSON New York Times API

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

UnicodeEncodeError: 'charmap' codec can't encode characters in position 20-21: character maps to

это URL has the data, что я пытаюсь разобрать в CSV. (I-де-выбран «Print клевые результаты»)

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

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

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

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

Брок

+0

должен называть его API JSON Blair :) –

+1

Показать код, а также полное сообщение traceback и FULL. –

ответ

0

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

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) 
0

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

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('\\', "") 
2

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

«Они используются не в наборе символов ascii. Вы можете поймать исключение UnicodeError.

Следуйте за golden rules of encodings.

  1. Decode рано в юникод (data.decode ('UTF-8', 'игнорировать'))

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

  3. Encode поздно - во время выхода - data.encode ('ASCII', 'игнорировать'))

Вы можете вероятно установить CSV писатель использовать UTF-8 кодировки при написании.

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

0

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

Смежные вопросы