标签:span baidu safe 自己 ddr nic har 一个 ack
类似爬虫程序,在百度地图API进行注册
在此处点击控制台,在应用管理------我的应用处 创建自己的应用。
创建应用如图所示,在请求校验方式处选择sn校验方式
记住自己的AK值
点开设置,记住自己的SK值
1、sn码及url的生成
url= http://api.map.baidu.com/geocoder/v2/?address=“输入的地点名”&output=json&ak=‘你的AK码‘&sn=‘你的sn码‘。
需要注意的是:
urllib.parse.quote(inputstr, safe="/:=&?#+!$,;‘@()*[]")
转换一下编码。2、sn码的计算方式:
代码如下:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @File : BaiduAPI.py 4 # @Author: 赵路仓 5 # @Date : 2020/3/10 6 # @Desc : 7 # @Contact : 398333404@qq.com 8 9 import urllib.request, urllib.parse, urllib.error 10 import json 11 import hashlib 12 13 14 MyAK = ‘你的AK‘ 15 MySK = ‘你的SK‘ 16 lat = 0 17 lng = 0 18 dictjson = {} # 声明一个字典 19 20 def JingWei(address): 21 global lat, lng 22 # 产生sn码 23 queryStr = "/geocoding/v3/?address=" + address + ‘&output=json&ak=‘ + MyAK 24 encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;‘@()*[]") 25 rawStr = encodedStr + MySK 26 sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest()) 27 28 # 生成url 29 url = urllib.parse.quote("http://api.map.baidu.com" + queryStr + "&sn=" + sn, safe="/:=&?#+!$,;‘@()*[]") 30 print(‘Retrieving‘, url) 31 32 # 从API读取数据 33 uh = urllib.request.urlopen(url) 34 data = uh.read().decode() 35 print(‘Retrieved‘, len(data), ‘characters‘) 36 37 # 解析数据 38 try: 39 js = json.loads(data) 40 except: 41 js = None 42 43 if not js or ‘status‘ not in js or js[‘status‘] != 0: 44 print(‘======Failure====‘) 45 print(data) 46 47 print(json.dumps(js, indent=4, ensure_ascii=False)) 48 49 # 获取经纬度坐标和地址类型 50 lat = js["result"]["location"]["lat"] 51 lng = js["result"]["location"]["lng"] 52 print(‘纬度‘, lat, ‘经度‘, lng) 53 level = js["result"]["level"] 54 print(‘地址类型‘, level) 55 56 57 # 基于百度地图API下的经纬度信息来解析地理位置信息 58 def getlocation(lat, lng): 59 print(lat,"ss",lng) 60 url = ‘/reverse_geocoding/v3/?ak=‘+MyAK+‘&output=json&coordtype=wgs84ll&location=‘+str(lat)+‘,‘+str(lng) 61 encodedStr = urllib.parse.quote(url, safe="/:=&?#+!$,;‘@()*[]") 62 rawStr = encodedStr + MySK 63 sn = (hashlib.md5(urllib.parse.quote_plus(rawStr).encode("utf8")).hexdigest()) 64 # 生成url 65 url = urllib.parse.quote("http://api.map.baidu.com" + url + "&sn=" + sn, safe="/:=&?#+!$,;‘@()*[]") 66 print(‘Retrieving‘, url) 67 req = urllib.request.urlopen(url) # json格式的返回数据 68 res = req.read().decode("utf-8") # 将其他编码的字符串解码成unicode 69 print(json.loads(res)) 70 return json.loads(res) 71 72 73 def jsonFormat(lat, lng): 74 str = getlocation(lat, lng) 75 global dictjson 76 dictjson={} 77 # get()获取json里面的数据 78 jsonResult = str.get(‘result‘) 79 address = jsonResult.get(‘addressComponent‘) 80 # 国家 81 country = address.get(‘country‘) 82 # 国家编号(0:中国) 83 country_code = address.get(‘country_code‘) 84 # 省 85 province = address.get(‘province‘) 86 # 城市 87 city = address.get(‘city‘) 88 # 城市等级 89 city_level = address.get(‘city_level‘) 90 # 县级 91 district = address.get(‘district‘) 92 # 区划代码 93 adcode=address.get(‘adcode‘) 94 # 街道 95 street=address.get(‘street‘) 96 # 街道编号 97 street_number=address.get(‘street_number‘) 98 # 把获取到的值,添加到字典里(添加) 99 # dictjson[‘country‘]=country 100 # dictjson[‘country_code‘] = country_code 101 dictjson[‘province‘] = province+city+district+street+street_number 102 dictjson[‘adcode‘] = adcode 103 # dictjson[‘city_level‘] = city_level 104 # dictjson[‘district‘]=district 105 return dictjson 106 107 108 109 if __name__ == "__main__": 110 JingWei("浙江大学") 111 print(jsonFormat(lat,lng)) 112 print(dictjson.get(‘province‘)+" 行政区划代码"+dictjson.get(‘adcode‘)) 113 JingWei("深圳大学") 114 print(jsonFormat(lat, lng)) 115 print(dictjson.get(‘province‘)+" 行政区划代码"+dictjson.get(‘adcode‘))
在 jsonFormat(lat, lng) 函数部分可以根据自己的需要进行添加字典。
1 address = jsonResult.get(‘addressComponent‘) 2 # 国家 3 country = address.get(‘country‘) 4 # 国家编号(0:中国) 5 country_code = address.get(‘country_code‘) 6 # 省 7 province = address.get(‘province‘) 8 # 城市 9 city = address.get(‘city‘) 10 # 城市等级 11 city_level = address.get(‘city_level‘) 12 # 县级 13 district = address.get(‘district‘) 14 # 区划代码 15 adcode=address.get(‘adcode‘) 16 # 街道 17 street=address.get(‘street‘) 18 # 街道编号 19 street_number=address.get(‘street_number‘) 20 # 把获取到的值,添加到字典里(添加) 21 # dictjson[‘country‘]=country 22 # dictjson[‘country_code‘] = country_code 23 dictjson[‘province‘] = province+city+district+street+street_number 24 dictjson[‘adcode‘] = adcode 25 # dictjson[‘city_level‘] = city_level 26 # dictjson[‘district‘]=district
输出的结果:
[Python]调用百度地图API对地点进行搜索,利用 JSON 返回纬度/行政区域编号
标签:span baidu safe 自己 ddr nic har 一个 ack
原文地址:https://www.cnblogs.com/zlc364624/p/12455791.html