1.目标
百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,使用百度地图API需要注册百度账号,通过百度地图开发者认证,在控制台新建自己的应用,获得密钥。本文主要讲获取到密钥之后的操作,编写python3脚本利用百度地图API获取poi地址和坐标点,并进行数据保存。
百度地图开放平台:http://lbsyun.baidu.com/apiconsole/key?application=key
API接口文档:http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api
2.步骤
- 构建查询条件
- 构建url
- 发送请求获取数据
- 解析数据
- 存储数据
3.具体操作
在百度地图开放平台获取到ak和sk之后,进行下面的操作。
3.1构建查询条件
构建查询条件可以通过两种方式:
- 用key,value方式组建之后转码,如:
kwd = {"query": "ATM机","tag":"银行","region": "224","output": "json", "ak": ak,"city_limit":"true"}
query_str=‘/place/v2/search?{}’.format(urllib.parse.urlencode(kwd))
- 手动拼接url再转码
queryStr = '/place/v2/search/?query=%s&output=json&ak=%s®ion=131' % (“苏州拙政园”,ak)
encodedStr = urllib.parse.quote(queryStr, safe="/:=&?#+!$,;'@()*[]")
ps:我一般用第二种,用确定的名称去query,如“苏州拙政园”,“上海迪士尼”
3.2生成sn,构建url
我们获取到的ak直接加到url里面,但是sk要经过加密生成sn才能使用
sn生成方式(官方代码):
# -*- coding: utf-8 -*-
# 第一行必须有,否则报中文字符非ascii码错误
import urllib
import hashlib
# 以get请求为例http://api.map.baidu.com/geocoder/v2/?address=百度大厦&output=json&ak=yourak
queryStr = '/geocoder/v2/?address=百度大厦&output=json&ak=yourak'
# 对queryStr进行转码,safe内的保留字符不转换
encodedStr = urllib.quote(queryStr, s