json.loads失败,"没有JSON对象可以被解码"

时间:2013-09-23 12:22:18

标签: python json unicode web-scraping scrapy

我正在使用Scrapy进行网页抓取。网站在<code>标记之间嵌入了json,如:

<code id="content" style="display:none;"><!--{"content": "text1",...,..., "compute": "text2"}--></code>

使用xpath,我能够在<code>标记内提取评论。使用:

hxs.select("//code[@id='content']/comment()").extract()

在标记评论字符后,内容为content = "{"content": "text1",...,..., "compute": "text2"}"

使用json.loads(内容)构建json时,出现"ValueError: No JSON object could be decoded"错误。

此外,str(内容)抛出:

"UnicodeEncodeError: 'ascii' codec can't encode characters in position 106512-106513: ordinal not in range(128)"

106512处的值为'\xa7'

提前致谢。

2 个答案:

答案 0 :(得分:2)

str(content)无法使用非ASCII字符,这本身就不是问题。 content.encode('utf-8')如果您想要的是字节字符串(虽然将其打印到控制台是另一种问题(PrintFails),但是如果您只想向我们展示变量中的内容,请{1}}获取Python语法表示。

repr(comment)表示No JSON object could be decoded甚至无法在字符串的开头找到类似JSON的内容,因此请查看该json.loads字符串的前面以查看是否repr()之前有任何杂散字符或控制代码。

答案 1 :(得分:0)

json中的字符串似乎是iso8859或Windows-1252。 \ xa7是其中一种编码中的§,而\ xc2 \ xa7是utf-8中的§。