2.4 亿条深圳共享单车数据集获取完整教程【开发者版】

2.4 亿条深圳共享单车数据集获取完整教程【开发者版】

Published on

目录:

源代码Github:深圳共享单车 2.4 亿级数据获取与 PostGIS 分析流水线(适用于深圳市政府开放平台的大部分数据的获取)。如果你无法访问Github,可以使用Gitee镜像:Urban-Spatial-Data-Analysis-No...

一句话概览

仓库包含把深圳市开放平台的共享单车历史记录稳定抓取并按天存入带空间类型的数据库(Postgres + PostGIS + TimescaleDB),支持增量续跑、审计对账和快速导出。

适合谁看

  • 需要稳定抓取市政开放数据的工程或数据同学

  • 需要在数据库里做空间分析的 GIS / 数据分析师

  • 想把采集流程做成可维护、可审计系统的团队

为什么不再使用旧版的文件

  • 旧版 fetcher-legacy.py 是单线程写 CSV,面对上亿条会非常慢,且断点续跑与去重困难。

  • 写 CSV 再导入数据库会产生重复 I/O,还要额外做索引与转换,浪费时间和磁盘。

于是我们采用:异步并发抓取 → 实时坐标转换 → 批量 COPY 入库 → 审计对账,效率和稳定性都有明显改善。

常用脚本一览

  • scr/data_pipline/fetcher.py:主抓取程序(异步并发)。

  • scr/data_pipline/db.py:数据库初始化、TimescaleDB 超表设置等。

  • scr/data_pipline/profiles.py:数据字段与增量列配置。

  • scr/data_pipline/coords.py:坐标系转换工具(BD09/GCJ → WGS84)。

  • scr/data_pipline/audit_days.py:按天统计并生成对账表,用于发现缺失并补抓。

  • scr/data_pipline/export_share.py:导出 CSV / GeoJSON(支持原始坐标与 WGS84)。

设计要点(通俗版)

  • 把慢的网络等待并行化(异步 + 限流),提高抓取速度。

  • 入库使用批量 COPY,减少数据库开销。

  • 实时完成坐标转换并同时保留原始坐标,避免后期大规模回填。

  • 把失败看成常态:重试、指数退避、记录坏页并跳过,保证长跑不中断。

  • 自动增量续跑:程序会从数据库读取已抓到的最新日期并从下一天开始续抓,避免重复。

简单运行步骤(更多参数见 README)

  1. 准备数据库:Postgres + PostGIS + TimescaleDB(仓库含初始化 SQL,或使用 Docker 快速启动)。

  2. 配置 .env(数据库连接、并发参数等)。

  3. 启动抓取:uv run python -m scr.data_pipline.fetcher(或在你的虚拟环境中运行)。

  4. scr/data_pipline/audit_days.py 生成按天对账表,确认是否需要补抓。

  5. 导出数据:scr/data_pipline/export_share.py(可选择导出原始坐标或 WGS84)。

常见问题与快速建议

  • 报 429(被限流):降低并发、等待后重试。

  • 出现 HTML 或解析异常:会被记录为坏页,可根据审计表决定是否补抓。

  • 数据库写入变慢:减少批量大小(rows per batch)、降低并发,或按日拆分提交。

  • 如果数据库里某天缺数据:用 audit_days 的输出作为补抓清单。

小结

这套流水线把复杂的工程细节藏在代码里,你得到的是可持续、可追溯的数据。程序会处理重试、限流、坐标转换、批量入库和审计,减少人工干预,方便后续分析与可视化工作。

更多细节请参考仓库根目录的 README.mdscr/data_pipline 目录下的脚本。

有更多问题可以在仓库issue或者评论区留言。

写在最后

支持

如果你也想直接获取全部的共享单车数据可以访问爱发电 · 完整的共享单车zip文件(非按照每日分类的单个json文件)支持我并获取国内(阿里云盘)下载链接。

按照每日分类的数据正在上传中......