资讯详情

基于百度地图 Place API 的城市 POI 抓取:python-mini-projects 中 Baidu_POI_crawl 实战全解析

发布时间:2026/9/20 21:46:31

500+
企业客户服务经验
120+
行业领域内容覆盖
3000+
原创页面设计沉淀
98%
客户满意度

基于百度地图 Place API 的城市 POI 抓取:python-mini-projects 中 Baidu_POI_crawl 实战全解析

基于百度地图 Place API 的城市 POI 抓取python-mini-projects 中 Baidu_POI_crawl 实战全解析【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址: https://gitcode.com/gh_mirrors/py/python-mini-projects本文以 python-mini-projects 仓库中的 Baidu_POI_crawl 项目为主体系统讲解如何通过百度地图开放平台的 Place API 批量抓取指定城市、指定类型关键词的兴趣点POIPoint of Interest数据。读完本文你将掌握 AK 密钥的申请与配置、main.py四个命令行参数的完整用法以及util.py中分页请求 → 结果解析 → 落盘记录的底层实现细节能够独立搭建一个可运行的 POI 数据采集脚本。项目定位一条命令抓取整座城市的 POI 数据POIPoint of Interest兴趣点是地图服务中的核心数据单元泛指城市中具有地理坐标的实体场所如大学、餐厅、加油站、医院等。Baidu_POI_crawl 项目正是围绕这一需求设计给定一个城市名和一个 POI 关键词脚本会自动调用百度地图 Place 检索 API将命中的 POI 名称、经纬度、所在区县和详细地址逐条写入本地文本文件。从仓库结构看该项目由四个部分组成文件作用main.py命令行入口负责解析--ak/--city/--poi/--save四个参数并调度抓取流程util.py核心实现封装百度 Place API 的请求、分页、解析与落盘逻辑requirements.txt依赖清单requests与jsonoutput/2021-11-17.txt实际运行示例展示了以成都 大学为条件抓取到的 54 条 POI 记录其中output目录下的历史结果文件是本项目实战价值最直接的证据它真实记录了 2021-11-17 以 大学 为关键词在成都地区抓取到的数据可作为理解输出格式的参照样本。环境准备与前置条件安装依赖项目的依赖极为精简requirements.txt 中仅声明了两个模块requests json其中requests是需要通过 pip 安装的第三方 HTTP 客户端库json是 Python 标准库自带的 JSON 解析模块脚本用它解析接口返回的 JSON 响应。在项目根目录下执行pip install -r projects/Baidu_POI_crawl/requirements.txt申请百度地图 Web API 密钥AK由于脚本通过百度地图开放平台的 Web 服务 API 获取数据调用前必须持有有效的访问密钥AKAccess Key。按原文档说明需要登录百度地图开放平台在控制台中创建服务端类型的应用获取对应的 AK登录百度地图开放平台lbsyun 控制台进入应用管理 → 我的应用创建新应用应用类型选择 Web 服务 API即 README 中提到的 web API勾选所需的服务权限创建成功后平台会生成一串 AK将其复制保存作为后续--ak参数的值。注意AK 相当于调用 API 的身份凭证请勿提交到公开仓库或泄露给他人。命令行参数与运行方式参数总览main.py 使用标准库argparse定义了四个命令行参数其中前三个为必填参数是否必填默认值含义--ak是无百度地图 Web API 的 AK 密钥--city是无要检索的城市名称如成都--poi是无POI 关键词如大学、餐厅--save否output结果文件的保存目录入口函数run(args)会先检查--save指定的目录是否存在不存在则通过os.makedirs(output)自动创建随后把四个参数透传给util.py中的get_baidu_poi(roi_key, city_str, baidu_web_ak, output)完成抓取最后打印current area completed表示该轮抓取结束。运行示例在仓库根目录执行原文档中的路径使用了 Windows 反斜杠这里统一为 Linux/macOS 风格的相对路径cd projects/Baidu_POI_crawl python main.py --ak your_ak --city 成都 --poi 大学脚本运行后会在默认的output目录下生成两个文件YYYY-MM-DD.txt当天抓取到的 POI 明细数据YYYY-MM-DD.log当天的抓取日志记录翻页截止位置与异常信息。若想自定义保存位置可追加--save参数python main.py --ak your_ak --city 成都 --poi 大学 --save data底层实现原理util.py 源码级解析如果说 main.py 是外壳那么 util.py 就是整个抓取流程的引擎。其核心函数get_baidu_poi(roi_key, city_str, baidu_ak, output)在while True循环中完成了构造请求 → 发起调用 → 解析响应 → 写入文件 → 翻页的完整链路。1. 请求 URL 的构造源码util.py按如下规则拼接检索地址URL http://api.map.baidu.com/place/v2/search?query roi_key \ region city_str \ outputjson \ ak baidu_ak \ scope2 \ page_size20 \ page_num str(page_num)各参数含义如下查询参数取值来源说明query--poi检索关键词即要抓取的 POI 类型或名称region--city检索区域即城市名称output固定json返回格式为 JSONak--ak百度地图密钥scope固定2检索详细程度从脚本实际解析的字段看scope2使响应包含行政区area与地址address等详细信息page_size固定20每页返回记录数page_num循环变量页码从 0 开始逐页递增随后通过requests.get(URL)发起 HTTP GET 请求并用json.loads(resp.text)将响应解析为字典。2. 分页抓取与终止条件百度 Place API 单次查询只能返回有限条记录因此脚本以page_size20固定分页、从page_num0开始逐页累加。分页的终止条件有两个util.py正常结束当前页res[results]为空数组说明已无更多数据脚本将该城市与页码写入日志后break异常结束请求或解析过程抛出任何异常except分支打印except并记录异常发生的城市与页码后break。3. 结果解析与落盘对非空结果页脚本遍历res[results]逐条提取 5 个字段util.pyj_name r[name] # POI 名称 j_lat r[location][lat] # 纬度 j_lon r[location][lng] # 经度 j_area r[area] # 所属行政区区县 j_add r[address] # 详细地址 j_str str(j_name) , str(j_lon) , str(j_lat) \ , str(j_area) , str(j_add) \n file.writelines(j_str)每条记录以逗号分隔写入当日.txt文件字段顺序固定为名称,经度,纬度,行政区,地址每行一条。文件以追加模式a打开并指定encodingutf-8保证中文内容正确写入。4. 限速与日志为了避免高频请求触发接口限流脚本在每翻完一页后执行time.sleep(1)休眠 1 秒util.py。同时日志文件YYYY-MM-DD.log会记录两类事件某一城市抓取到最后一页时的页码、以及发生异常时的城市与页码时间戳精确到秒%Y-%m-%d-%H-%M-%S便于事后核对抓取进度与断点位置。输出结果解读一份真实的历史抓取样本仓库中保留的 output/2021-11-17.txt 是一次真实的运行结果以成都为城市、大学为关键词共抓取到 54 条 POI。摘录前几行四川大学(望江校区),104.090633,30.637031,武侯区,四川省成都市武侯区一环路南一段24号 四川大学(江安校区),104.005145,30.562814,双流区,成都市双流区川大路二段2号 电子科技大学(沙河校区),104.107198,30.681868,成华区,四川省成都市成华区建设北路二段4号 成都大学,104.196613,30.656051,龙泉驿区,四川省成都市龙泉驿区成洛大道2025号 西南民族大学(武侯校区),104.055946,30.645411,武侯区,四川省成都市武侯区一环路南四段16号这份样本可以直观验证两点输出格式与源码完全一致每行均为名称,经度,纬度,行政区,地址五段式 CSV 风格结构可直接导入 Excel、Pandas 或 GIS 工具做后续分析数据覆盖具有区域性结果包含武侯区、双流区、成华区、郫都区、金堂县、都江堰市等多个成都下属区县说明region成都的检索范围覆盖了全市而不仅是中心城区。拿到这份数据后即可基于经纬度做地图标注、基于行政区做分布统计或结合地址字段做更细粒度的空间分析。使用注意事项与扩展方向已知的实现特点与限制从源码结构看该脚本存在以下值得注意的实现细节基于 util.py 推断接口走 HTTP 而非 HTTPS请求地址为http://api.map.baidu.com/...在强调加密传输的生产环境中建议自行升级为 HTTPS单城市单关键词轮询一次运行只处理一个city poi组合如需批量城市或多种 POI 类型需在外部循环中多次调用get_baidu_poi固定分页大小page_size20为硬编码值若需调整每页数量或改用其他检索半径如周边检索radius需修改 util.py 中的 URL 拼接逻辑宽泛异常捕获except分支会吞掉所有异常类型并直接终止当前城市抓取排错时可先手工请求一次 URL 确认 AK 权限与配额状态。可行的扩展方向多城市/多关键词批量抓取在main.py外层增加循环遍历城市列表与 POI 关键词列表每次调用get_baidu_poi并指定不同--save子目录结果结构化存储当前输出为 CSV 风格文本可改为写入 SQLite / GeoJSON便于直接对接地理信息处理流程断点续抓日志文件已记录了每个城市的最后页码可据此在异常中断后从断点页码继续抓取避免重复消耗配额请求重试与更细粒度限速将except分支改为记录后重试若干次并将time.sleep(1)提取为可配置项。总而言之Baidu_POI_crawl 是一个麻雀虽小、五脏俱全的 API 数据采集范例从 CLI 参数设计到分页请求、从响应解析到日志落盘完整覆盖了写一个生产可用爬虫脚本所需的全部关键环节。理解它的实现后你只需替换 API 端点与字段映射即可快速迁移到其他地图服务或数据源。【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址: https://gitcode.com/gh_mirrors/py/python-mini-projects创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
热门专题

继续阅读更多专题内容

围绕企业服务、数字化转型与官网运营的常青话题,持续输出深度内容

企业官网建设指南 企业托管服务模式 财税政策与解读 企业数字化转型 官网SEO与获客 网站安全与运维
配套服务

读完这篇文章,了解更多服务

从整站搭建到SEO布局,17项核心服务助您打造高转化的企业官网

01

企业托管整站搭建

从信息架构到栏目预留,搭建可生长的企业站点骨架,每个页面独立原创设计。...

了解详情
02

规整可信网页设计

雪地靴温暖风原创设计,金属铜线条贯穿全页,拒绝通用模板与AI流水线。...

了解详情
03

企业服务SEO布局

关键词体系与语义化结构,从建站源头为搜索排名而生。...

了解详情
04

业务预约咨询表单

多场景表单与线索收集体系,把访问流量转化为可追踪的销售线索。...

了解详情
05

企业服务站点运维

安全巡检、数据备份与内容更新支持,全年守护网站稳定运行。...

了解详情
06

全终端商务适配

电脑、平板、手机一致呈现,移动端体验与转化同样出色。...

了解详情
需要专业建议?

让专业顾问为您解读行业趋势

关于企业官网建设、SEO获客与数字化转型的任何疑问,欢迎一对一咨询我们的专业顾问。