Python JSON纽约时报API
我刚开始学习Python,想从网上获取数据,所以我来问问。
我已经能从纽约时报的API获取数据,并把JSON格式的输出转换成CSV文件了。不过,根据我的搜索内容,有时候在写入CSV文件时会出现以下错误。
UnicodeEncodeError: 'charmap' 编码无法在第20-21个位置编码字符。
这个链接里有我想解析成CSV的数据。(我已经取消了“打印漂亮的结果”选项)
我很确定这个错误发生在title:"Spitzer......."附近。
我试着在网上搜索,但似乎找不到答案。我对编码了解不多,但我猜从JSON记录中获取的数据是以某种方式编码的。
如果你能提供任何帮助,我将非常感激。
提前谢谢你,
Brock
4 个回答
看起来它在尝试解码'/'这个字符,而这个字符每次出现斜杠的时候都会用到。我们可以通过使用字符串函数来避免这个问题。
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('\\', "")
每一段文本数据都是经过编码的。在没有任何代码的情况下,很难判断问题出在哪里。所以我现在能给出的唯一建议是:在解析数据之前,先尝试解码响应...
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 )
你需要检查一下你的HTTP头部,看看它们在返回结果时使用了什么字符编码。我猜测所有内容都是用utf-8编码的,而当你尝试写入CSV文件时,输出却隐式地被编码成了ascii格式。
你使用的那个'字符不在ascii字符集里。你可以捕捉到UnicodeError这个错误。
遵循编码的黄金法则。
尽早将数据解码为unicode(用data.decode('utf-8', 'ignore'))。
在内部使用unicode。
晚一点再编码——在输出的时候(用data.encode('ascii', 'ignore'))。
你可能可以设置你的CSV写入器在写入时使用utf-8编码。
注意:在盲目使用utf-8之前,你真的应该先看看它们给你的是什么编码。