Python JSON纽约时报API

时间:2010-02-21 21:28:58

标签: python json api

对Python很新,并从网上获取数据,所以就在这里。

我能够从NYT api中提取数据并将JSON输出解析为CSV文件。但是,根据我的搜索,当我尝试将行写入CSV时,可能会出现以下错误。

  

UnicodeEncodeError:'charmap'编解码器无法对位置20-21中的字符进行编码:字符映射到

我想要解析为CSV的URL has the data。 (我取消选择“打印漂亮的结果”)

我很确定错误发生在标题附近:“斯皮策.......”

我试图搜索网络,但我似乎无法得到答案。我不知道很多编码,但我猜测我从JSON记录中检索的数据是以某种方式编码的。

非常感谢您提供的任何帮助。

非常感谢,

布洛克

4 个答案:

答案 0 :(得分:2)

您需要检查HTTP标头,以查看返回结果时使用的char编码。我敢打赌,所有内容都编码为utf-8,当您尝试写入CSV时,您隐式将输出编码为ascii。

他们正在使用的不在ascii字符集中。您可以捕获UnicodeError异常。

关注golden rules of encodings

  1. 提前解码为unicode(data.decode('utf-8','ignore'))

  2. 在内部使用unicode。

  3. 编码延迟 - 输出期间 - data.encode('ascii','忽略'))

  4. 您可以将CSV编写器设置为在写入时使用utf-8编码。

    注意:在盲目使用utf-8之前,你应该真正看到他们给你的编码。

答案 1 :(得分: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 )

答案 2 :(得分: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('\\', "")

答案 3 :(得分:0)

小心nytimes API - 它不会为您提供完整的正文。