4

在 Python 中使用 HTTP 请求我能够得到响应,但是 json 和 simplejson 模块都无法解包它。两者都声称输入不是好的 json。

import requests
import json

html_base = u"http://www.google.com/trends/fetchComponent?q="
q = u"asdf,qwerty"
query_type = u"&cid=TIMESERIES_GRAPH_0&export=3"
full_query = html_base + q + query_type

response = requests.get(full_query)
data = json.loads(response.text)

错误:

C:\Anaconda\lib\json\decoder.pyc in raw_decode(self, s, idx)
    382             obj, end = self.scan_once(s, idx)
    383         except StopIteration:
--> 384             raise ValueError("No JSON object could be decoded")
    385         return obj, end

ValueError: No JSON object could be decoded
4

2 回答 2

3

请原谅我的死灵,但是,对于任何将来应该以这种方式绊倒的人来说,这是一个干净的解决方法。

import ast

nice_dict = ast.literal_eval(response.text.split('setResponse(')[1].rstrip()[:-2].replace('new Date', ''))

ast.literal_eval()接受一个字符串并返回一个字典。内部的所有内容都会清理 json 以使其可返回。请注意,您的日期现在是元组。

于 2015-05-13T17:05:12.377 回答
2

那是因为它不是 JSON。如果您将 URL 放入浏览器并查看输出,您会发现它实际上是 JavaScript。它以注释开头,然后是函数调用 - JSON 本身位于函数调用内部。

于 2014-10-04T22:03:43.727 回答