重要声明:
本篇文章内容仅作技术交流,请确保在使用时遵守相关法律法规及高德开放平台使用条款。
一、需求描述
由于公司调研业务需要统计某省市所属区县的某类场所的名称、地址、联系方式等信息,依靠人工在地图软件上手动搜索并复制粘贴形成统计表格的方式效率过低,因此基于python技术,使用高德地图web服务API接口,通过代码实现自动爬取数据并生成.CSV文件的功能。以下将对项目全过程进行详细描述。
二、项目概述
2.1 基础配置
此次项目开发所使用的python安装版本为3.9.6,开发工具选择pycharm2021.2.1(社区版),python版本可以选择最新版本并可提前安装依赖库。
2.2 注册高德地图开发平台
此处直接转载官方开发文档链接:概述-Web服务 API | 高德地图APIhttps://lbs.amap.com/api/webservice/summary 对高德API不熟悉的朋友建议先仔细阅读官方文档,若只关注快速代码开发可以参考下方我所展示的步骤即可。
第一步:登录高德地图开发平台,可直接使用高德地图APP扫码登录,若无高德地图账号可使用手机号注册,以下是高德地图开发平台网址
高德开放平台 | 高德地图APIhttps://lbs.amap.com/第二步:进入高德地图开发平台后,点击右上角“控制台”进入控制台界面。在控制台页面左侧的“应用管理”模块中选择“我的应用”,点击右上方“创建新应用”。
第三步:设置应用名称及应用类型,此处设置仅为方便用户对自建应用进行区分。
第四步:点击右上角“添加key”按钮,设置“key名称”(注意命名规范),“服务平台”选择“web服务”,其他内容根据自己需要填写,完成后点击“提交”,返回上一页即可获得应用key编码。
2.3 配置依赖库
编译代码需要用到requests、pandas两个依赖库,可以通过两种途径进行下载:
①使用命令提示符下载。
第一步:首先要检查自己PIP版本是否支持我们所要安装的依赖库,"win + R"输入“CMD”进入命令提示符界面,输入“pip --version”检查版本信息。
pip --version
第二步:确认PIP版本后,输入“pip install requests”,下载requests库。
pip install requests
如果PIP版本不支持下载安装目标依赖库会进行报错,则需要输入“python -m pip install --upgrade pip”进行升级。
python -m pip install --upgrade pip
第三步:输入“pip install pandas”下载pandas库。
pip install pandas
若出现资源链接响应超时的情况建议使用第三方库进行下载,下面给出几个国内镜像下载地址:
以pandas库为例,实际使用时输入以下代码即可:
序号 名称 地址 1 清华大学 TUNA 镜像源 https://pypi.tuna.tsinghua.edu.cn/simple/
2 阿里云镜像源 https://mirrors.aliyun.com/pypi/simple/
3 华为云镜像源 https://developer.huaweicloud.com/mirror/#/pypi_simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
②在pychram的python编译器中下载。
打开pychram,在上方菜单栏中选择“file”点击“setting”找到“Project:python”进入python编译器。点击左上角的“+”,输入需要安装的库名称,选中后点击下方“install package”,等待安装即可。
2.4 编写代码
import requests
import pandas as pd
def get_poi_data(api_key, keywords, city, max_count=50):
"""
获取高德地图POI数据
参数:
api_key: 高德开放平台API Key
keywords: 搜索关键词(如:餐饮、酒店)
city: 城市名称/城市编码(如:北京/010)
max_count: 最大获取数量(最多1000条)
"""
url = "https://restapi.amap.com/v3/place/text" # 高德地图地址编码API服务地址
page_size = 25 # 每页最多25条
pages = (min(max_count, 1000) + page_size - 1) // page_size
results = []
for page in range(1, pages + 1):
params = {
"key": api_key,
"keywords": keywords,
"city": city,
"offset": page_size,
"page": page,
"extensions": "all" # 获取详细信息
}
try:
response = requests.get(url, params=params)
response.raise_for_status()
data = response.json()
if data["status"] == "1":
for poi in data["pois"]:
result = {
"名称": poi.get("name", ""),
"地址": poi.get("address", ""),
"经纬度": poi.get("location", ""),
"联系电话": poi.get("tel", ""),
"省份": poi.get("pname", ""),
"城市": poi.get("cityname", ""),
"区域": poi.get("adname", ""),
"类别": poi.get("type", "")
}
results.append(result)
else:
print(f"请求失败:{data.get('info', '未知错误')}")
break
except Exception as e:
print(f"第{page}页请求异常:{str(e)}")
break
return pd.DataFrame(results)
# 使用示例
if __name__ == "__main__":
# 此处替换为你的高德API Key
AMAP_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# 获取:此处手动编辑名称、地区的POI数据量(建议最多100条)
df = get_poi_data(AMAP_API_KEY, "名称", "地区", 100)
# 查看结果
print(f"获取到{len(df)}条数据")
print(df.head())
# 保存到CSV,文件生成在项目根目录处,文件名称为all.csv
df.to_csv("all.csv", index=False, encoding="utf_8_sig")
2.5 编译及测试
运行代码,如无报错则显示运行结果如下(以上海市区星巴克为目标进行查找)。
可在项目根文件中找到名为all.csv的表格文件,打开表格结果如图所示。