Python玩转高德地图API(二)
咪哥杂谈
共 3595字,需浏览 8分钟
· 2019-09-23
咪哥杂谈
阅读时间约 4 分钟。阅读可忽略代码,代码提供给想练手的人。
1
前言这篇文章来继续完成上篇文章没有完成的编码任务!忘记的,可以简单回顾一下《Python玩转高德地图API(一)》
2
环境介绍- Python版本 : Python3.7
- 开发工具 : Pycharm
- 第三方库 : requests
还会用到的是 Python 自带的 json 库。因为调用 API 返回的结果是 JSON 或者 XML 形式的报文,关于这两点,可以回看《python小课堂25 - 你真的了解JSON嘛?》
本项目必然是采用 JSON 啦,现在除了一些传统公司(比如我之前在的保险公司,以及一些国企航空公司)的老项目使用 XML 报文来进行数据传输,大部分互联网项目中采用的都是 JSON 传递接口信息。
3
requests 玩转 API在之前的爬虫文章中,有介绍的此库的使用。作者个爱玩摄影的大神,写代码就像玩摄影一样,纯属艺术创作。
以上次介绍高德 API 中的 POI 接口来举例。
1. 打开官网,搜索 POI 处
2. 阅读官网 API 文档,查看各参数含义
看懂文档,理解了官方示例后,其实操作起来很简单,只需要我们用 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 的话比较多余
4
硬核代码如果想要实验的同学,可以按照顺序将代码 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后面还有很多很多数据。。
5
总结是不是感觉调用 API 这种东西,就是这么简单枯燥而无趣呢。。。可往往各种商业公司的背后,赚钱的逻辑就是靠这些接口丫!
大概一年前的时候,我自己简单的开发出来了第一个版本,当时没有想着用 flask 等框架,后续我会在此项目技术上,继续集成开发吧。
当时放弃的原因是.....上家公司的路段高德地图不支持....
到现在,此项目 star14,fork5。。。
感兴趣的后台回复 高德 获取源码地址。
说下后期本号的安排,系统性的,表面知识介绍的也差不多了,可能偶尔会随性的写些自己的感想,亦或是 Python 小爬虫方面的东西。
不过接下来的核心路线,是使用 Python 来完成一些数据结构以及算法的知识。比如数组、链表、树,亦或是各种排序算法、有用的算法之类的。。。
毕竟程序员的灵魂核心,还是这些本质上的东西!一味地追新是很累的...Python实现算法的话,语法上有着天然优势,简洁优雅,而不失内涵!
本篇文章就到这里啦,有什么想要说的,欢迎留言区留言探讨!
Python入门自学的一些技巧和心得咪哥的思维认知日记(三) - 赚钱思维
评论
互联网晚报 | 大麦网已退款凤凰传奇演唱会“柱子票”;钟薛高再成被执行人;iPhone 16或取消实体音量键和电源键
大麦网回应凤凰传奇演唱会买到“柱子票”:已退票退款据报道,凤凰传奇2024巡回演唱会常州站演出结束的第二天,有网友称自己在大麦网买到“柱子票”,因为观看效果不佳,要求退款被拒。23日,记者从涉事网友处了解到,大麦方面给出了退款建议,但被其拒绝,“我希望平台退款加赔偿,并重视屡次出现的‘柱子票’问题。
产品刘
0
知乎高问:程序员有必要知道为什么做某个功能吗?
将Python客栈设为“星标⭐”第一时间收到最新资讯前言知乎上有一个提问:程序员有必要知道为什么做某个功能吗?↓↓↓今天,我们就这个话题一起来做个讨论。不知道程序员的你,在接到产品经理提的一个需求后,是习惯马上动手开始撸代码呢?还是会先暂停一下,认真思考一会如下一些问题,比如这个需求产生的背景是什么
Python客栈
0
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
Stability AI开放Stable Diffusion 3 API,在线免费使用
「Stability AI」宣布开放其最新文本到图像生成模型「Stable Diffusion 3」的API接口,供开发者和企业使用。该模型采用创新的多模态扩散转换器架构,在字体、细节还原、提示理解等方面表现优异,评测结果超越了业内其他顶尖系统。与DALL-E 3和Midjourney v6等最先进
IQ前端
0