如何使用Python解析来自所有URL的JSON?

时间:2014-02-04 23:21:54

标签: python regex json

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

以下是我的网址,假设它是URL-A

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

以下是我的JSON字符串 -

{
 "description": "",
 "statistics": {
  "dataCount": 0,
 }
}

与上面的URL-A一样,我有大约5个网址,这也给了我相同的JSON字符串,但dataCount计数可能不是零。

现在我应该做的是,我需要编写一个Python脚本,它可以扫描所有5个URL,然后再解析JSON String以从中提取dataCount及其计数。并且应该每隔几秒钟继续运行以扫描URL,然后解析它。

以下是我的网址

URL-A       http://hostnameA:1234/Service/statistics?%24format=json
URL-B       http://hostnameB:1234/Service/statistics?%24format=json
URL-C       http://hostnameC:1234/Service/statistics?%24format=json
URL-D       http://hostnameD:1234/Service/statistics?%24format=json
URL-E       http://hostnameE:1234/Service/statistics?%24format=json

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

hostnameA - dataCount
hostnameB - dataCount
hostnameC - dataCount
hostnameD - dataCount
hostnameE - dataCount

这可以在Python中实现吗?

更新: -

这是我试过的 -

import urllib, json
url = "http://hostnameA:1234/Service/statistics?%24format=json"
response = urllib.urlopen(url);
data = json.loads(response.read())
print data

但是如何为其他5个URL做同样的事情并继续每10秒扫描一次并从中提取dataCount?

1 个答案:

答案 0 :(得分:1)

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:
        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'),
        ('hostnameA', 'http://hostnameB:1234/Service/statistics?%24format=json'),
        ('hostnameA', 'http://hostnameC:1234/Service/statistics?%24format=json'),
        ('hostnameA', 'http://hostnameD:1234/Service/statistics?%24format=json'),
        ('hostnameA', 'http://hostnameE: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()

编辑以回应AKIWEB:

在Window 7 x64上使用请求0.13.2运行Python 2.7.6:

>>> requests.get('http://echo.jsontest.com/key/value/one/two').json
{u'key': u'value', u'one': u'two'}

>>> requests.get('http://echo.jsontest.com/key/value/one/two').json()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    requests.get('http://echo.jsontest.com/key/value/one/two').json()
TypeError: 'dict' object is not callable

是的,我很确定。