python高德地图api调用实例_Python玩转高德地图API(二)
Python玩转高德地图API(二)
前言
上篇文章中,简单的介绍了下高德地图的 API 相关业务知识,不知道大家有没有看懂咧!
这篇文章来继续完成上篇文章没有完成的编码任务!忘记的,可以简单回顾一下《Python玩转高德地图API(一)》
环境介绍
开始前,先来说下本机环境。Python版本 : Python3.7
开发工具 : Pycharm
第三方库 : requests
还会用到的是 Python 自带的 json 库。因为调用 API 返回的结果是 JSON 或者 XML 形式的报文,关于这两点,可以回看《python小课堂25 - 你真的了解JSON嘛?》
本项目必然是采用 JSON 啦,现在除了一些传统公司(比如我之前在的保险公司,以及一些国企航空公司)的老项目使用 XML 报文来进行数据传输,大部分互联网项目中采用的都是 JSON 传递接口信息。
requests 玩转 API
requests 是一个优雅的男孩子,不对,是一个优雅的第三方库~
在之前的爬虫文章中,有介绍的此库的使用。作者个爱玩摄影的大神,写代码就像玩摄影一样,纯属艺术创作。
以上次介绍高德 API 中的 POI 接口来举例。
1. 打开官网,搜索 POI 处
2. 阅读官网 API 文档,查看各参数含义
3. 运行看结果
看懂文档,理解了官方示例后,其实操作起来很简单,只需要我们用 requests 库携带自己的 key 向高德发起请求即可。
当我们想获取北京市"麦当劳"全部餐饮地址时,请求的地址:
https://restapi.amap.com/v3/place/text?keywords=麦当劳&city=北京&offset=20&page=1&key={key}&extensions=base
url中,?后面跟的就是请求时的参数。keywords :要搜索的关键词
city :城市,可以查看具体的城市码表(官方提供)
offset :每页显示多少条数据
page :页数
key :之前申请的用户 key
extensions : 传入 base 即可,all 的话比较多余
还有些可选项,不传就行啦,比如 output=xml ,默认不传就是 json 形式返回结果。
硬核代码
代码其实不多,算上空行一共 70 行不到,就可以获取完整地理信息。
如果想要实验的同学,可以按照顺序将代码 copy 到自己的编辑器实践。下面按照顺序介绍:
1. 读取用户 key 函数
目的是读取本地 key ,灵活化处理(这样不用暴露自己的 key 给大家看了 ) user-key中写入你自己的key。
def read_key():
""" 持久化key,便于读取 """
key_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'user-key')
print(key_path)
with open(key_path, 'r', encoding='utf-8') as f:
key = f.read()
print(key)
return key
2. requests 请求,get 方式通用函数
没什么好介绍的,之前说过很多遍了,使用方法按照去看 requests 库的官方文档即可。
def request_url_get(url):
""" 请求url方法get方法 """
try:
r = requests.get(url=url, timeout=30)
if r.status_code == 200:
return r.text
return None
except RequestException:
print('请求url返回错误异常')
return None
3. 调用高德 api 抽象方法,解析返回的 json 函数
使用了 python 自带的 json 库,将高德 api 返回的字符串转为了 json 形式,但是在 python 中,其实是 dict 类型的,获取结果可以通过类似 result['address'] 的形式获取想要的内容。
def parse_json(content_json):
""" 解析json函数 """
result_json = json.loads(content_json)
return result_json
def request_api(url):
""" 请求高德api 解析json """
result = request_url_get(url)
result_json = parse_json(result)
return result_json
4. 调用高德 api 抽象方法,解析返回的 json 函数
def run():
""" 运行函数 """
keywords = '麦当劳'
city = 'beijing'
key = read_key()
offset = 20
index_url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \
f'offset={offset}&page=1&key={key}&extensions=base'
index_result = request_api(index_url)
pages = math.ceil(int(index_result['count']) / offset) # 算出一共需要的总页数
for page in range(1, pages + 1):
url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \
f'offset={offset}&page={page}&key={key}&extensions=base'
result = request_api(url)
print(result)
最后这个函数,好好说下,精华思路都在这块。
为了代码的灵活度,我们可以将请求的中的变化参数抽出来,作为程序中的变量去构造请求。
请求第一次时,高德地图会返回一个 count 字段,代表总数量,使用 count / offset ,就能得到一共我们要循环访问多少页。代码中做了向上转型的处理。
例如下面:
查询北京麦当劳一共 262 个数据,每页只显示 20 条数据(offset的值),所以 262/20 = 13.1 。
这样需要让传入 url 中的 page 从 1 - 14 页去循环获取数据。所以在代码中,使用了 math.ceil 的方法让 13.1 变成 14。
看下最终获取完数据的截图:
Pycharm后面还有很多很多数据。。
总结
嗯!到这里,交通数据分析项目相关的内容就结束了,接下来就是自己开发了...大家感兴趣的也可以自行尝试。
是不是感觉调用 API 这种东西,就是这么简单枯燥而无趣呢。。。可往往各种商业公司的背后,赚钱的逻辑就是靠这些接口丫!
大概一年前的时候,我自己简单的开发出来了第一个版本,当时没有想着用 flask 等框架,后续我会在此项目技术上,继续集成开发吧。
当时放弃的原因是.....上家公司的路段高德地图不支持....
到现在,此项目 star14,fork5。。。
感兴趣的后台回复 高德 获取源码地址。
本篇文章就到这里啦,有什么想要说的,欢迎留言区留言探讨!
python高德地图api调用实例_Python玩转高德地图API(二)相关推荐
- python高德地图api调用实例_Python 利用高德地图api实现经纬度与地址的批量转换...
我们都知道,可以使用高德地图api实现经纬度与地址的转换.那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢? 在这里,选用高德Web服务的API,其中的地址/逆地址编码,可以实现经纬 ...
- python爬虫实例电商_如何用代码爬抓电商数据(附淘宝API调用实例)
原标题:如何用代码爬抓电商数据(附淘宝API调用实例) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能B ...
- 如何用代码爬抓电商数据(附淘宝API调用实例)
2019独角兽企业重金招聘Python工程师标准>>> 如何用代码爬抓电商数据(附淘宝API调用实例) http://www.21ds.cn/2190.html 转载于:https: ...
- WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...
原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...
- php识别名片,基于php的聚合数据名片识别api调用实例
基于php的聚合数据名片识别api调用实例 本代码是基于聚合数据名片识别api实现名片识别功能,使用前你需要通过http://www.doczj.com/doc/f71face3bed5b9f3f90 ...
- WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现
去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统,54寸大屏电脑电视一体机.要求有很炫的展示效果,要有一定的视觉冲击力,可触控操作.当然满足客户的要求也可以有 ...
- java neo4j rest api_Neo4j REST API使用实例—ttlsa教程系列之neo4j(二)
ttlsa教程系列之neo4j---(二)Neo4j REST API使用实例 一. 简介 通过REST API方式与Neo4j进行交互式操作.请求和响应数据默认是以JSON格式展示的.需要显示设置请 ...
- Neo4j REST API使用实例---ttlsa教程系列之neo4j(二)
为什么80%的码农都做不了架构师?>>> ttlsa教程系列之neo4j---(二)Neo4j REST API使用实例 一. 简介 通过REST API方式与Neo4j进行交 ...
- python api调用展示_Python百视api调用示例
代码描述:基于Python的百视api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/129 1.[代码][Python]代码 #!/usr/bin/python ...
- 百度地图API调用实例之地址标注与位置显示
之前弄了个谷歌地图API标注的调用实例,后来要求改成百度地图. 感谢主,通过网上资料(百度地图API,百度地图API详解之地图标注)收集及研究, 终于把百度地图标注和显示功能实现出来了,具体实现方法如 ...
最新文章
- Android C组件的经济意义
- 积木赛尔号机器人_赛尔号11年,圣灵谱尼从章鱼变花臂少年,最终成为了老父亲...
- STM32 电机教程 5 - 步进电机基础知识介绍
- JSON C# Class Generator ---由json字符串生成C#实体类的工具
- 安装启动gui卡住_为Kali Linux中的Sqlmap配置 WEB-GUI 界面
- ElasticSearch - 学习
- mac mysql docker_docker学习(5) 在mac中创建mysql docker容器
- 如何用范德蒙行列式完成插值
- 可替换MPS MP2451的高压DCDC芯片FS2451助力智能电表设计40V0.5A降压IC
- word给图片插入题注并在文中交叉使用
- 微信 公众号 网页授权登录(静默授权)
- AT070TN92 电源
- 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生
- 《Single-Shot Object Detection with Enriched Semantics》论文笔记
- 【长期更新】计算机类企业网申地址内推码大整理
- 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸
- C# 实现刻录光盘功能
- C++ dpi,px,cm,mm换算心得,以及以a4纸计算为例,其它大家各自换算
- 【路由器】TP Link TL-WR702N 迷你路由器为何无法进入管理后台
- java项目 升级jdk1.8 遇到 tomcat启动 are only available on JDK 1.5 and higher错误
热门文章
- 带你深度解析断点续传原理并案例Http1.1协议
- 大数据人工智能常用特征工程与数据预处理Python实践(2)
- OSPF邻居关系建立故障排除
- 【Wing Loss】《Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks》
- 实现一个简单的记事本APP
- 开放源代码的设计层面框架Spring——day03
- 数据分析入门:15种EXCEL数据分析功能
- ALOS 12.5米DEM 数字高程模型数据免费下载介绍(20200617)
- json parser类的使用
- 西部旅游杂志西部旅游杂志社西部旅游编辑部2022年第19期目录