300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python调用百度地图api查询经纬度

Python调用百度地图api查询经纬度

时间:2020-06-23 13:05:54

相关推荐

Python调用百度地图api查询经纬度

最近在看《python网络编程》,里面的代码使用的案例是通过调用谷歌地图来查询经纬度,但是网络一直连不上,就用百度地图的api来实现书中的案例。

这里提到的查询经纬度按照调用层次可以有三种办法:第一种是构造url请求使用内置的request库去查询,实例代码如下

import requests# 构造 url 获取查询响应def geocode(address):paramters = {'address': address, 'output': 'json'}base = 'http://api./geocoder'response = requests.get(base, params=paramters)answer = response.json()print(answer['result'])if __name__ == '__main__':geocode('景德镇市浮梁')

第二种办法是使用更底层的内置http库在协议层面构造请求,实例代码如下

import http.clientimport jsonfrom urllib.parse import quote_plusbase = '/geocoder'# 直接使用 http 协议def geocode(address):path = f'{base}?address={quote_plus(address)}&output=json'connection = http.client.HTTPConnection('api.')connection.request('GET', path)rawreply = connection.getresponse().read()reply = json.loads(rawreply.decode('utf-8'))print(reply['result'])if __name__ == '__main__':geocode('景德镇市浮梁')

第三种办法是使用更加底层的socket库在传输层去创建会话获取经纬度,实例代码如下

import socketfrom urllib.parse import quote_plusrequest_txt = """\GET /geocoder?address={}&output=json HTTP/1.1\r\n\Host: api.:80\r\n\User-Agent: search4.py (Foundations of Python Network Programming)\r\n\Connection: close\r\n\\r\n"""# 建立会话def geocode(address):sock = socket.socket()sock.connect(('api.', 80))request = request_txt.format(quote_plus(address))sock.sendall(request.encode('ascii'))raw_reply = b''while True:more = sock.recv(4096)if not more:breakraw_reply += moreprint(raw_reply.decode('utf-8'))if __name__ == '__main__':geocode('景德镇市浮梁')

这边测试代码运行成功,最后一个代码返回的结果如下:

HTTP/1.1 200 OKContent-Type: text/javascript;charset=utf-8Date: Sat, 03 Jul 07:22:49 GMTHttp_x_bd_logid: xxxHttp_x_bd_logid64: xxHttp_x_bd_product: mapHttp_x_bd_subsys: apimapP3p: CP=" OTI DSP COR IVA OUR IND COM "Server: apacheContent-Length: 210Connection: close{"status":"OK","result":{"location":{"lng":117.221466,"lat":29.357788},"precise":0,"confidence":20,"level":"\u533a\u53bf"}}Process finished with exit code 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。