我有一个URL,如果我在浏览器上点击它,它会给我下面的JSON字符串 -
以下是我的网址,假设它是URL-A
,我有三个网址 -
http://hostnameA:1234/Service/statistics?%24format=json
以下是我的JSON字符串 -
{
"description": "",
"statistics": {
"dataCount": 0,
}
}
现在我编写了一个Python脚本,它扫描我的所有3个URL,然后再解析JSON String以从中提取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'
我正在使用Python 2.7.3和Ubuntu 12.04以及我正在运行的requests
版本是0.8.2
(我想这就是问题所在。)
在任何情况下,除了requests
之外我有什么方法可以使用除{{1}}之外的其他库来重写上述脚本,这只是从服务器获取数据的部分,我们可以使用其他库吗?
因为我猜,我无法更新此软件包,因为它是我们的生产ubuntu服务器所以我需要找到其他方法来实现这一点。
答案 0 :(得分:2)
你可以使用requests
,只是不依赖于响应对象为你做解码:
import json
# ...
data = json.loads(req.content)
return int(data['statistics']['dataCount'])
版本0.8.2是古老的;您可以使用virtualenv
创建一个位置来安装新版本:
$ virtualenv venv
New python executable in venv/bin/python2.7
Also creating executable in venv/bin/python
Installing Setuptools..............................................................................................................................................................................................................................done.
Installing Pip.....................................................................................................................................................................................................................................................................................................................................done.
$ cd venv/
$ bin/pip install requests
Downloading/unpacking requests
Downloading requests-2.2.1.tar.gz (421kB): 421kB downloaded
Running setup.py egg_info for package requests
Installing collected packages: requests
Running setup.py install for requests
Successfully installed requests
Cleaning up...
$ bin/python -c 'import requests; print requests.__version__'
2.2.1