2010-02-21 106 views
2

真的很新,Python和從網上獲取數據,所以在這裏。Python JSON紐約時報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。 (我去選擇「打印漂亮的結果」)

我敢肯定錯誤是近標題存在的:「斯皮策.......」

我曾經試圖在網上搜索,但我似乎無法得到答案。我對編碼知之甚少,但我猜測我從JSON記錄中檢索的數據是以某種方式編碼的。

任何幫助,您可以提供將不勝感激。

提前許多感謝,

布洛克

+0

應稱之爲JSON Blair API :) – 2010-02-21 21:45:00

+1

顯示您的代碼以及完整的回溯和FULL錯誤消息。 – 2010-02-21 22:44:58

回答

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. 解碼早期成unicode(data.decode( 'UTF-8', '忽略'))

  2. 內部使用Unicode。

  3. 編碼下旬 - 輸出時 - data.encode( 'ASCII', '忽略'))

你或許可以設置您的CSV作家寫作時使用UTF-8編碼。

注意:在盲目地使用utf-8處理所有事情之前,你應該看看他們給了你什麼編碼。

0

要小心nytimes API - 它不會提供全身文本。

相關問題