HTTP请求和Python中的JSONparsing
我想通过Google路线APIdynamic查询Google地图。 例如,这个请求计算从芝加哥,伊利诺伊州到洛杉矶,加利福尼亚州通过乔普林,密苏里州和俄克拉荷马城的两个航点的航线,OK:
http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false
它以JSON格式返回结果。
我怎样才能在Python中做到这一点? 我想发送这样的请求,接收结果并parsing它。
我build议使用真棒请求库:
import json, requests url = 'http://maps.googleapis.com/maps/api/directions/json' params = dict( origin='Chicago,IL', destination='Los+Angeles,CA', waypoints='Joplin,MO|Oklahoma+City,OK', sensor='false' ) resp = requests.get(url=url, params=params) data = json.loads(resp.text)
由于其内置的JSON解码器, requests
Python模块负责检索JSON数据并对其进行解码。 以下是从模块文档中取得的一个例子:
>>> import requests >>> r = requests.get('https://github.com/timeline.json') >>> r.json() [{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
所以没有必要使用一些单独的模块来解码JSON。
requests
具有内置的.json()
方法
import requests requests.get(url).json()
import urllib import json url = 'http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false' result = json.load(urllib.urlopen(url))
使用请求库,漂亮地打印结果,以便更好地find要提取的键/值,然后使用嵌套for循环来parsing数据。 在这个例子中,我逐步提取行车路线。
import json, requests, pprint url = 'http://maps.googleapis.com/maps/api/directions/json?' params = dict( origin='Chicago,IL', destination='Los+Angeles,CA', waypoints='Joplin,MO|Oklahoma+City,OK', sensor='false' ) data = requests.get(url=url, params=params) binary = data.content output = json.loads(binary) # test to see if the request was valid #print output['status'] # output all of the results #pprint.pprint(output) # step-by-step directions for route in output['routes']: for leg in route['legs']: for step in leg['steps']: print step['html_instructions']