在Python中读取JSON响应

在Python中读取JSON响应,json,python-2.7,selenium,Json,Python 2.7,Selenium,我试图从中读取json响应。但它不起作用!我得到以下错误: ValueError:无法解码任何JSON对象 以下是我尝试过的代码: import urllib2, json a = urllib2.urlopen('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=t

我试图从中读取json响应。但它不起作用!我得到以下错误:

ValueError:无法解码任何JSON对象

以下是我尝试过的代码:

import urllib2, json
a = urllib2.urlopen('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false&callback=_callbacks_._DElanZU7Xh1K')
data = json.loads(a)
我做了以下改变:

import requests, json
r=requests.get('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false')
json_data = json.loads(r.text)
print json_data['ruleGroups']['USABILITY']['score']
一个快速问题-构造图像链接

我能到这里:-

from selenium import webdriver

txt = json_data['screenshot']['data']
txt = str(txt).replace('-','/').replace('_','/')
#then in order to construct the image link i tried : -
image_link = 'data:image/jpeg;base64,'+txt
driver = webdriver.Firefox()
driver.get(image_link)
问题是我没有得到图像,而且len(object_original)与len(image_link)相比也不同。谁能告诉我在我构建的图像链接中缺少的正确元素?。多谢各位


这里是API链接-抱歉添加得太晚了

需要对代码进行两个更正:

import urllib2, json
a = urllib2.urlopen('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false')
data = json.loads(a.read())
  • url已更正(如Felix Kling所述)。您必须从发送的GET请求中删除
    callback
    参数
  • 另外,如果您检查之前获取的响应类型,您会注意到它不是字符串。它是
    。由于
    json.loads()
    接受
    string
    作为参数变量,因此您可能会遇到另一个错误。因此,使用
    a.read()
    获取
    字符串中的响应数据
  • 因此,这应该是您的代码:

    import urllib2, json
    a = urllib2.urlopen('https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false')
    data = json.loads(a.read())
    
    第二个查询(关于图像)的答案是:


    这里是您试图获取的图像-

    Felix Kling的地址是正确的,但我还创建了一个保存URL的变量。您可以尝试以下方法,它应该可以工作:

    import urllib2, json
    url = "https://www.googleapis.com/pagespeedonline/v3beta1/mobileReady?key=AIzaSyDkEX-f1JNLQLC164SZaobALqFv4PHV-kA&screenshot=true&snapshots=true&locale=en_US&url=https://www.economicalinsurance.com/en/&strategy=mobile&filter_third_party_resources=false"
    response = urllib2.urlopen(url)
    data = json.loads(response.read())
    print data
    

    我假设服务器返回JSONP是因为
    callback=\u callbacks.\u DElanZU7Xh1K
    。删除它,它可能会返回JSON。您是否查看了
    a
    的类型和格式?是否可以查看此操作:
    data=JSON.loads(a.read())
    谢谢felix kling,从url中删除“callback”参数解决了我的问题,我将修改请求参数import requests,JSON r=requests.get()json_data=json.load(r.text)打印json_数据['ruleGroups']['USABILITY']['score']可以在下面添加您的答案,我现在就接受。嘿,杰森,这太棒了。我将把“imageToSave.jpeg”字符串改为list元素,以便在域列表上迭代。谢谢。下次如果您有其他查询,请将其作为单独的问题发布,特别是如果第二个查询与第一个查询没有关联。无论如何,享受吧!:)你是个救命的人,你能帮我一下吗?我会调查的。好的。如果你有任何其他问题,一定要这样通知我。