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(二)相关推荐

  1. python高德地图api调用实例_Python 利用高德地图api实现经纬度与地址的批量转换...

    我们都知道,可以使用高德地图api实现经纬度与地址的转换.那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢? 在这里,选用高德Web服务的API,其中的地址/逆地址编码,可以实现经纬 ...

  2. python爬虫实例电商_如何用代码爬抓电商数据(附淘宝API调用实例)

    原标题:如何用代码爬抓电商数据(附淘宝API调用实例) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能B ...

  3. 如何用代码爬抓电商数据(附淘宝API调用实例)

    2019独角兽企业重金招聘Python工程师标准>>> 如何用代码爬抓电商数据(附淘宝API调用实例) http://www.21ds.cn/2190.html 转载于:https: ...

  4. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...

    原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...

  5. php识别名片,基于php的聚合数据名片识别api调用实例

    基于php的聚合数据名片识别api调用实例 本代码是基于聚合数据名片识别api实现名片识别功能,使用前你需要通过http://www.doczj.com/doc/f71face3bed5b9f3f90 ...

  6. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现

    去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系统,54寸大屏电脑电视一体机.要求有很炫的展示效果,要有一定的视觉冲击力,可触控操作.当然满足客户的要求也可以有 ...

  7. java neo4j rest api_Neo4j REST API使用实例—ttlsa教程系列之neo4j(二)

    ttlsa教程系列之neo4j---(二)Neo4j REST API使用实例 一. 简介 通过REST API方式与Neo4j进行交互式操作.请求和响应数据默认是以JSON格式展示的.需要显示设置请 ...

  8. Neo4j REST API使用实例---ttlsa教程系列之neo4j(二)

    为什么80%的码农都做不了架构师?>>>    ttlsa教程系列之neo4j---(二)Neo4j REST API使用实例 一. 简介 通过REST API方式与Neo4j进行交 ...

  9. python api调用展示_Python百视api调用示例

    代码描述:基于Python的百视api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/129 1.[代码][Python]代码 #!/usr/bin/python ...

  10. 百度地图API调用实例之地址标注与位置显示

    之前弄了个谷歌地图API标注的调用实例,后来要求改成百度地图. 感谢主,通过网上资料(百度地图API,百度地图API详解之地图标注)收集及研究, 终于把百度地图标注和显示功能实现出来了,具体实现方法如 ...

最新文章

  1. Android C组件的经济意义
  2. 积木赛尔号机器人_赛尔号11年,圣灵谱尼从章鱼变花臂少年,最终成为了老父亲...
  3. STM32 电机教程 5 - 步进电机基础知识介绍
  4. JSON C# Class Generator ---由json字符串生成C#实体类的工具
  5. 安装启动gui卡住_为Kali Linux中的Sqlmap配置 WEB-GUI 界面
  6. ElasticSearch - 学习
  7. mac mysql docker_docker学习(5) 在mac中创建mysql docker容器
  8. 如何用范德蒙行列式完成插值
  9. 可替换MPS MP2451的高压DCDC芯片FS2451助力智能电表设计40V0.5A降压IC
  10. word给图片插入题注并在文中交叉使用
  11. 微信 公众号 网页授权登录(静默授权)
  12. AT070TN92 电源
  13. 微信运动_刷步思路+Python源码+云部署(持续更新)_一蓑烟雨任平生
  14. 《Single-Shot Object Detection with Enriched Semantics》论文笔记
  15. 【长期更新】计算机类企业网申地址内推码大整理
  16. 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸
  17. C# 实现刻录光盘功能
  18. C++ dpi,px,cm,mm换算心得,以及以a4纸计算为例,其它大家各自换算
  19. 【路由器】TP Link TL-WR702N 迷你路由器为何无法进入管理后台
  20. java项目 升级jdk1.8 遇到 tomcat启动 are only available on JDK 1.5 and higher错误

热门文章

  1. 带你深度解析断点续传原理并案例Http1.1协议
  2. 大数据人工智能常用特征工程与数据预处理Python实践(2)
  3. OSPF邻居关系建立故障排除
  4. 【Wing Loss】《Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks》
  5. 实现一个简单的记事本APP
  6. 开放源代码的设计层面框架Spring——day03
  7. 数据分析入门:15种EXCEL数据分析功能
  8. ALOS 12.5米DEM 数字高程模型数据免费下载介绍(20200617)
  9. json parser类的使用
  10. 西部旅游杂志西部旅游杂志社西部旅游编辑部2022年第19期目录