数据获取|通过高德API批量获取地址经纬度(Python)_批量获取经纬度
一、背景与目标
-
需求场景:
-
解决的问题:
-
地址标准化:非结构化地址需清洗为API可解析的格式。
-
API调用限制:并发请求、日调用量限制。
-
错误处理:应对API返回的多种错误类型(如密钥错误、并发超限、地址解析失败等)
-
-
核心代码逻辑:
-
读取Excel文件,遍历地址列。
-
调用高德地理编码API。
-
解析返回的JSON数据,提取经纬度。
-
错误处理与重试机制。
-
-
代码优化点:
-
添加请求间隔(如time.sleep(0.5))。
-
记录失败地址,支持重试和二次修改。
-
二、完整流程与步骤
1.环境准备(安装Python、VSCode及扩展插件)
-
下载Python:
-
参考CSDN文章:今天给大家带来Python的下载安装教程!
-
-
下载VS Code:
- 参考CSDN文章:2024 Visual Studio Code的下载与安装
-
安装扩展插件:
- 点击侧边栏的
-> 在搜索框输入“python” -> 安装官方Python插件,如图所示。

- 顺道可以安装中文包,以及一个AI编码插件TalkX(注册后可长期免费使用),如图所示。


- 点击侧边栏的
2.API获取
-
注册开发者账号:
- 高德地图:高德开放平台
- 点击右上角“注册”,如图所示。

- 进入以下页面,完善信息,如图所示。

-
创建应用并获取 API Key :
- 回到首页,鼠标点击右上角“控制台”,如图所示。

- 侧边栏里,点击\"应用管理\"下的“我的应用” -> 点击右侧“创建新应用”,如图所示。

- 根据自身需要,填写“应用名称”和选择“应用类型” ,然后点击“新建”即可。

- 鼠标点击右上角“添加Key”,如图所示。

- 自命名Key名称 -> 选择“Web服务”平台,勾选阅读并同意相关协议 -> 点击“提交”,即可获取API Key,如图所示。

- 回到首页,鼠标点击右上角“控制台”,如图所示。

3.数据准备
-
数据格式:
-
将目标数据保存为Excel文件(.xlsx),列名清晰(如:“序号” “名称” “地址” 等)。
-
如需从网页中获取表格可参考CSDN文章:数据获取|如何将网页里的表格导出成Excel表格
-
-
地址清洗:
-
确保地址包含省市区(如“广东生深圳市南山区科技园”)。(tip:没有“省”“市”也没关系,如果报错则需相应添加)
-
移除模糊词(如“附近”“对面”)、特殊符号(如#、())。(tip:可以借助Excel的“查找和选择”功能批量处理,如图所示)

-
4.代码实现
- 打开VS Code -> 点击“打开文件夹”,选择存放目标Excel表格的文件夹,如图所示。

- 点击“新建文件” -> 输入Python文件名称(如test.py),如图所示。

-
复制粘贴如下代码,注意:代码中的API key和表格名称都需要替换成自己的。
import requestsimport pandas as pdimport time# 高德API参数key = \"你的API Key\"url = \"https://restapi.amap.com/v3/geocode/geo\"# 读取Excel数据df = pd.read_excel(\"你的表格名称及后缀\")# 请求参数max_retries = 3retry_delay = 1 # 秒request_interval = 0.5 # 秒failed_addresses = []for index, row in df.iterrows(): address = row[\"地址\"] #如果报错,可检查这里表格储存地址的列名是否对应 params = { \"address\": address, \"key\": key, } for attempt in range(max_retries): try: response = requests.get(url, params=params) result = response.json() if result[\"status\"] == \"1\" and result[\"geocodes\"]: location = result[\"geocodes\"][0][\"location\"] lng, lat = location.split(\",\") df.at[index, \"经度\"] = lng df.at[index, \"纬度\"] = lat break else: #如果报错,可复制粘贴“返回结果”的内容,询问AI进行调试 print(f\"地址 {address} 第{attempt+1}次尝试失败:{result.get(\'info\')},返回结果:{result}\") time.sleep(retry_delay) except Exception as e: print(f\"请求异常:{e}\") time.sleep(retry_delay) else: df.at[index, \"经度\"] = \"失败\" df.at[index, \"纬度\"] = \"失败\" failed_addresses.append(address) time.sleep(request_interval) # 控制请求频率# 保存结果df.to_excel(\"你的表格名称_带坐标.xlsx\", index=False)# 保存失败地址if failed_addresses: with open(\"failed_addresses.txt\", \"w\") as f: f.write(\"\\n\".join(failed_addresses)) print(f\"有{len(failed_addresses)}个地址解析失败,已保存到文件。\")
- 找到菜单栏 -> 点击“终端” -> “新建终端”,如图所示。

- 输入以下命令:
- 安装依赖
pip install pandas requests openpyxl - 运行Python文件(tip:python+自己创建的Python文件名称及后缀)
python test.py
- 安装依赖
4.常见报错与解决方案
- DAILY_QUERY_OVER_LIMIT(原因:日调用量超限)(解决:升级商用套餐或等待次日重置)
- CUQPS_HAS_EXCEEDED_THE_LIMIT(原因:并发请求超限)(解决:降低请求频率(如每秒1次),分批处理数据)
- USERKEY_PLAT_NOMATCH(原因:API Key与平台类型不匹配)(解决:检查Key绑定的平台,注意需选“Web服务”)
- ENGINE_RESPONSE_DATA_ERROR(原因:地址无法解析)(解决:根据failed_addresses.txt文件,找到错误地址,打开高德官网输入目标名称检查地址是否更新,手动修正表格里的失败地址)
希望以上流程总结和复用代码对大家有所帮助,欢迎各位在评论区指正或留下新遇到的问题,一起交流进步!


