Python请求百度地图API获取指定地址的经纬度信息
话不多说直接看代码:
import hashlib
import http
import json
from urllib import parse
import requests
def get_url(address):
# http://api.map.baidu.com/geocoder/v2/?address=你的地址&output=json&ak=你的ak
queryStr = '/geocoder?address=%s&output=json&ak=你的ak' % address
# 对queryStr进行转码,safe内的保留字符不转换
encodedStr = parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
# 在最后直接追加上sk
rawStr = encodedStr + '你的sk'
# 计算sn
sn = (hashlib.md5(parse.quote_plus(rawStr).encode("utf8")).hexdigest())
# 由于URL里面含有中文,所以需要用parse.quote进行处理,然后返回最终可调用的url
url = parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")
return url
def get_Location(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',}
data = requests.get(url,headers=headers).json()
coordinate = data['result']['location']
return coordinate
if __name__ == '__main__':
while True:
address = input('请输入您要查询的地址:')
if address.__eq__(''):
print("请输入地址!")
continue
url = get_url(address)
coordinate = get_Location(url)
lng = coordinate['lng']
lat = coordinate['lat']
print(coordinate)
# 测试数据
# 江苏省南京市建邺区金鹰世界
# 南京市建邺区应天大街888号
下面简单介绍一下百度地图api的key的获取
首先登陆官网:百度地图API
然后点击最右边的控制台,在我的应用中选择创建应用
然后选择你所需要的功能然后记录下你的ak和sk,校验方式选择sn校验
好的到这里功能就已经完全实现了,下面来测试一下:
请输入您要查询的地址:江苏省南京市建邺区金鹰世界
{'lng': 118.746925, 'lat': 32.029049}
请输入您要查询的地址:南京市建邺区应天大街888号
{'lng': 118.747082, 'lat': 32.029462}
大功告成。