做pc和移动网站的适配/网站优化公司哪家好
1.创建百度API应用
类似爬虫程序,在百度地图API进行注册
在此处点击控制台,在应用管理------我的应用处 创建自己的应用。
创建应用如图所示,在请求校验方式处选择sn校验方式
记住自己的AK值
点开设置,记住自己的SK值
2.实现
1、sn码及url的生成
url= http://api.map.baidu.com/geocoder/v2/?address=“输入的地点名”&output=json&ak='你的AK码'&sn='你的sn码'。
需要注意的是:
- 由于url中有中文字符串,需要使用函数
urllib.parse.quote(inputstr, safe="/:=&?#+!$,;'@()*[]")
转换一下编码。 - 在url里output可以选择输出为json格式或xml格式,默认是xml格式。
2、sn码的计算方式:
python实现百度地图API获取某地址的经纬度
代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : BaiduAPI.py
# @Author: 赵路仓
# @Date : 2020/3/10
# @Desc :
# @Contact : 398333404@qq.com import urllib.request, urllib.parse, urllib.error
import json
import hashlibMyAK = '你的AK'
MySK = '你的SK'
lat = 0
lng = 0
dictjson = {} # 声明一个字典def JingWei(address):global lat, lng# 产生sn码queryStr = "/geocoding/v3/?address=" + address + '&output=json&ak=' + MyAKencodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")rawStr = encodedStr + MySKsn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())# 生成urlurl = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")print('Retrieving', url)# 从API读取数据uh = urllib.request.urlopen(url)data = uh.read().decode()print('Retrieved', len(data), 'characters')# 解析数据try:js = json.loads(data)except:js = Noneif not js or 'status' not in js or js['status'] != 0:print('======Failure====')print(data)print(json.dumps(js, indent=4, ensure_ascii=False))# 获取经纬度坐标和地址类型lat = js["result"]["location"]["lat"]lng = js["result"]["location"]["lng"]print('纬度', lat, '经度', lng)level = js["result"]["level"]print('地址类型', level)# 基于百度地图API下的经纬度信息来解析地理位置信息
def getlocation(lat, lng):print(lat,"ss",lng)url = '/reverse_geocoding/v3/?ak='+MyAK+'&output=json&coordtype=wgs84ll&location='+str(lat)+','+str(lng)encodedStr = urllib.parse.quote(url, safe="/:=&?#+!$,;'@()*[]")rawStr = encodedStr + MySKsn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest())# 生成urlurl = urllib.parse.quote("http://api.map.baidu.com" + url + "&sn=" + sn, safe="/:=&?#+!$,;'@()*[]")print('Retrieving', url)req = urllib.request.urlopen(url) # json格式的返回数据res = req.read().decode("utf-8") # 将其他编码的字符串解码成unicodeprint(json.loads(res))return json.loads(res)def jsonFormat(lat, lng):str = getlocation(lat, lng)global dictjsondictjson={}# get()获取json里面的数据jsonResult = str.get('result')address = jsonResult.get('addressComponent')# 国家country = address.get('country')# 国家编号(0:中国)country_code = address.get('country_code')# 省province = address.get('province')# 城市city = address.get('city')# 城市等级city_level = address.get('city_level')# 县级district = address.get('district')# 区划代码adcode=address.get('adcode')# 街道street=address.get('street')# 街道编号street_number=address.get('street_number')# 把获取到的值,添加到字典里(添加)# dictjson['country']=country# dictjson['country_code'] = country_codedictjson['province'] = province+city+district+street+street_numberdictjson['adcode'] = adcode# dictjson['city_level'] = city_level# dictjson['district']=districtreturn dictjsonif __name__ == "__main__":JingWei("浙江大学")print(jsonFormat(lat,lng))print(dictjson.get('province')+" 行政区划代码"+dictjson.get('adcode'))JingWei("深圳大学")print(jsonFormat(lat, lng))print(dictjson.get('province')+" 行政区划代码"+dictjson.get('adcode'))
在 jsonFormat(lat, lng) 函数部分可以根据自己的需要进行添加字典。
address = jsonResult.get('addressComponent')# 国家country = address.get('country')# 国家编号(0:中国)country_code = address.get('country_code')# 省province = address.get('province')# 城市city = address.get('city')# 城市等级city_level = address.get('city_level')# 县级district = address.get('district')# 区划代码adcode=address.get('adcode')# 街道street=address.get('street')# 街道编号street_number=address.get('street_number')# 把获取到的值,添加到字典里(添加)# dictjson['country']=country# dictjson['country_code'] = country_codedictjson['province'] = province+city+district+street+street_numberdictjson['adcode'] = adcode# dictjson['city_level'] = city_level# dictjson['district']=district
输出的结果: