如何在请求库之外使用Python脚本从url获取json数据?

2024-09-30 01:34:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个URL,如果我在浏览器上点击它们,它会给我以下JSON字符串-

下面是我的URL,假设它是URL-A,我有大约三个URL-

http://hostnameA:1234/Service/statistics?%24format=json

下面是我的JSON字符串-

^{pr2}$

现在我已经编写了一个Python脚本,它扫描我所有的3个URL,然后解析JSON字符串,从中提取dataCount的值。它应该每隔几秒钟就运行一次来扫描URL然后解析它。在

下面是我的网址

hostnameA       http://hostnameA:1234/Service/statistics?%24format=json
hostnameB       http://hostnameB:1234/Service/statistics?%24format=json
hostnameC       http://hostnameC:1234/Service/statistics?%24format=json

我想在控制台上看到的数据是这样的,这里dataCount将是实际的数字

hostnameA - dataCount
hostnameB - dataCount
hostnameC - dataCount

我有下面的python脚本,它在我的cygwin本地运行得很好,但是如果我在我公司生产的ubuntu机器上运行它,它会给出一个错误-

import requests
from time import sleep

def get_data_count(url):
    try:
        req = requests.get(url)
    except requests.ConnectionError:
        return 'could not get page'

    try:
        # this line is giving an error
        return int(req.json['statistics']['dataCount'])
    except TypeError:
        return 'field not found'
    except ValueError:
        return 'not an integer'

def main():
    urls = [
        ('hostnameA', 'http://hostnameA:1234/Service/statistics?%24format=json'),
        ('hostnameB', 'http://hostnameB:1234/Service/statistics?%24format=json'),
        ('hostnameC', 'http://hostnameC:1234/Service/statistics?%24format=json')
    ]

    while True:
        print('')
        for name, url in urls:
            res = get_data_count(url)
            print('{name} - {res}'.format(name=name, res=res))
        sleep(10.)

if __name__=="__main__":
    main()

以下是我得到的错误-

AttributeError: 'Response' object has no attribute 'json'

我使用的是python2.7.3和ubuntu12.04,我运行的requests版本是0.8.2(我想这就是问题所在)。在

在任何情况下,除了requests之外,有没有其他方法可以重写上面的脚本,即从服务器获取数据的部分,我们可以正确地使用其他库?在

因为我想,我不能更新这个包,因为它是我们的产品ubuntu服务器,所以我需要找到其他方法来做这个。在


Tags: namejsonhttpurlgetreturnserviceres
1条回答
网友
1楼 · 发布于 2024-09-30 01:34:01

您仍然可以使用requests,只是不依赖于response对象为您解码:

import json

# ...
data = json.loads(req.content)
return int(data['statistics']['dataCount'])

版本0.8.2是一个古老的版本;您可以使用virtualenv来创建一个位置,让您安装新版本:

^{pr2}$

相关问题 更多 >

    热门问题