Python爬虫(二)--利用百度地图API批量获取城市所有的POI点

本文介绍如何使用Python结合百度地图API批量获取城市内的POI(兴趣点)信息。通过创建应用获取AK,理解Place API的区域检索服务,包括城市内、矩形和圆形检索。示例代码演示了获取北京市四环内饭店信息的过程,通过分片处理以获取超过400个结果。API的高效利用能为数据应用开发带来便利。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:WenWu_Both
出处:http://blog.youkuaiyun.com/wenwu_both/article/
版权:本文版权归作者和优快云博客共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文链接;否则必究法律责任

上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步:
1、设置请求参数(url,headers,cookies,post或get验证等)访问目标站点的服务器;
2、解析服务器返回的文档,提取需要的信息。

而API的工作机制与爬虫的两步类似,但也有些许不同:
1、API一般只需要设置url即可,且请求方式一般为“get”方式
2、API服务器返回的通常是json或xml格式的数据,解析更简单
也许到这你就明白了,API简直就是开放的“爬虫”呀,可以告诉你,基本就是这个意思。好的,言归正传,本篇我们就演示如何运用Python结合百度地图API来批量获取POI(兴趣点)。

所谓POI(兴趣点),指的是人们感兴趣,比较常去的地方,比如银行、医院、学校等,利用城市的POI的空间属性可以做非常多的事情,至于什么事情呢,此处省略10000字。。。

说干就干,Let’s go!

(1)创建百度地图应用
访问百度地图API需要一个信令(AK),打开百度地图开放平台,点击右上角“API控制台”,即进入了百度地图的开发界面。

<think>嗯,用户想用Python编写一个爬取高德地图公园和绿地POI信息的代码。首先,我需要确定高德地图的API是否提供这样的数据。高德确实有POI搜索的API,所以应该可行。 首先,用户需要注册高德开放平台账号,获取API的Key。这个步骤是必须的,否则无法调用接口。然后,查看高德的POI分类代码,公园和绿地可能属于不同的类别代码,比如公园可能在050100,而绿地可能在050500。需要确认这些分类是否正确,可能需要查阅高德的文档。 接下来,构造API请求的URL。高德的POI搜索接口需要参数如keywords、types、city、offset、page等。用户需要确定是按城市还是全国范围爬取。如果是全国,可能需要分城市处理,或者使用多边形区域划分。不过高德的分页参数一次最多返回1000条,但实际可能限制为每页最多25条数据,所以需要处理分页。 然后,处理API的返回结果,解析JSON数据,提取需要的字段,比如名称、地址、坐标、类型等。需要注意返回结果中的total字段,判断是否还有更多数据需要翻页。不过高德的page参数可能有最大页数限制,需要测试一下。 还要考虑异步请求或者多线程提高爬取速度,但作为基础示例,可能先保持简单,用循环分页请求。同时,遵守高德的API调用频率限制,避免被封禁,可能需要设置延时。 存储数据的话,可以用CSV文件,方便后续处理。需要确保异常处理,比如网络请求失败、JSON解析错误等,增加程序的健壮性。 最后,用户可能需要处理坐标系的转换,高德用的是GCJ-02坐标系,如果需要其他坐标系如WGS-84,可能需要转换,但这一步可能超出基础范围,可以暂时不提或者简单说明。 总结步骤:注册获取Key,确定分类代码,构造请求URL,分页获取数据,解析存储数据,处理异常和限速。需要注意法律合规,遵守高德的使用条款,不进行大规模爬取以免触发限制。</think>以下是用Python编写高德地图公园、绿地POI爬虫的完整步骤(请遵守平台使用条款): 一、准备工作 1. 注册高德开放平台账号 2. 创建应用获取API Key(Web服务类型) 3. 安装依赖库: ```python pip install requests pandas ``` 、核心代码实现 ```python import requests import pandas as pd import time # 高德API基础参数 API_KEY = "your_api_key" # 替换成你的Key BASE_URL = "https://restapi.amap.com/v3/place/text" POI_TYPES = "050100,050500" # 公园:050100 绿地:050500 CITY = "城市名称/全国可不填" # 可选参数 def get_poi_data(page=1): params = { "key": API_KEY, "types": POI_TYPES, "city": CITY, "offset": 25, # 每页记录数 "page": page, "extensions": "all" # 返回完整信息 } try: response = requests.get(BASE_URL, params=params) response.raise_for_status() return response.json() except Exception as e: print(f"请求失败: {e}") return None def parse_poi_data(json_data): pois = [] for item in json_data.get("pois", []): poi = { "名称": item.get("name"), "地址": item.get("address"), "坐标": item.get("location"), "类型": item.get("type"), "区域": item.get("pname") + item.get("cityname") + item.get("adname"), "电话": item.get("tel"), "ID": item.get("id") } pois.append(poi) return pois def main(): all_pois = [] page = 1 while True: data = get_poi_data(page) if not data or "pois" not in data: break all_pois.extend(parse_poi_data(data)) # 判断是否还有下一页 if int(data.get("count", 0)) < 25: break page += 1 time.sleep(0.5) # 遵守QPS限制 # 保存到CSV df = pd.DataFrame(all_pois) df.to_csv("park_green_space.csv", index=False, encoding="utf_8_sig") print(f"共获取{len(all_pois)}条数据") if __name__ == "__main__": main() ``` 三、关键说明 1. API参数说明: - `types`参数对应高德分类代码: - 公园:050100(风景名胜-公园广场) - 绿地:050500(风景名胜-自然保护区) - `city`可指定城市名称/城市编码(建议分城市获取) 2. 数据字段说明: - 包含名称、地址、经纬度(GCJ-02坐标系)、分类、行政区划、联系方式等 - 完整字段参考高德API文档 3. 注意事项: - 需遵守高德API的QPS限制(建议设置0.5秒间隔) - 每日调用限额根据账号等级不同(免费版每日1万次) - 数据仅限合法使用,禁止大规模采集 四、扩展优化建议 1. 多城市批量爬取:维护城市列表循环调用 2. 异常处理:增加重试机制和日志记录 3. 坐标系转换:如需WGS-84坐标需调用坐标转换API 4. 数据去重:根据POI ID进行重复判断 建议先使用测试Key进行小规模数据获取,确认符合需求后再扩大采集范围。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值