Python JSON纽约时报API

3 投票
4 回答
1460 浏览
提问于 2025-04-15 19:33

我刚开始学习Python,想从网上获取数据,所以我来问问。

我已经能从纽约时报的API获取数据,并把JSON格式的输出转换成CSV文件了。不过,根据我的搜索内容,有时候在写入CSV文件时会出现以下错误。

UnicodeEncodeError: 'charmap' 编码无法在第20-21个位置编码字符。

这个链接里有我想解析成CSV的数据。(我已经取消了“打印漂亮的结果”选项)

我很确定这个错误发生在title:"Spitzer......."附近。

我试着在网上搜索,但似乎找不到答案。我对编码了解不多,但我猜从JSON记录中获取的数据是以某种方式编码的。

如果你能提供任何帮助,我将非常感激。

提前谢谢你,

Brock

4 个回答

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

你需要检查一下你的HTTP头部,看看它们在返回结果时使用了什么字符编码。我猜测所有内容都是用utf-8编码的,而当你尝试写入CSV文件时,输出却隐式地被编码成了ascii格式。

你使用的那个'字符不在ascii字符集里。你可以捕捉到UnicodeError这个错误。

遵循编码的黄金法则

  1. 尽早将数据解码为unicode(用data.decode('utf-8', 'ignore'))。

  2. 在内部使用unicode。

  3. 晚一点再编码——在输出的时候(用data.encode('ascii', 'ignore'))。

你可能可以设置你的CSV写入器在写入时使用utf-8编码。

注意:在盲目使用utf-8之前,你真的应该先看看它们给你的是什么编码。

撰写回答