• 中国大陆五级行政区划数据爬虫


    数据源:中华人民共和国国家统计局官方网站

    统计局数据特点描述

    1. 统计局每年10月31日更新一次数据。
    2. 统计局的数据分为省,市,区县、乡,街道、镇,村、居委会共五级。
    3. 省级编码为两位,其余均为12位。前六位编码规则与身份证相同,其余编码规则不明,欢迎知道的朋友补充。
    4. 村、居委会的城乡编码具体业务含义不清楚,欢迎知道的朋友补充。

    系统设计特点

    1. 完全按照统计局的数据编码规则,不做任何转换。

    2. 按照统计局页面命名,分别将数据编码为:

      级别省(区、直辖市)区县、乡街道、镇村、居委会
      编码PROVINCECITYCOUNTYTOWNVILLAGE
    3. 提供json(children标识主子结构)和flatten(code,pCode标识主子关系)两种输出结构。

    4. 静态方法直接调用。

      // 获取json格式的数据,2021年的,到街道级别
      AreaReptileUtil.doCrawlJson("2021", AreaLevel.TOWN);
      // 获取flatten格式的数据,2021年的,到街道级别
      AreaReptileUtil.doCrawlFlat("2021", AreaLevel.TOWN);
    5. 轻量级,依赖仅有hutool(用于发http请求)和jsoup(用于解析html)。

    6. 提供debug模式(仅解析北京、天津、河北三省的详细数据)用于调试。 注意,该配置全局有效,默认为关闭状态

      1. AreaReptileUtil.setDebugMode(true);
      2. List<AreaNode> areaNode = AreaReptileUtil.doCrawlJson("2009", AreaLevel.COUNTY);
    7. 有下级数据的,会附带下级数据的对应页面。

    8. 输出结果为utf-8编码

    注意

    1. 统计局网站有防ddos攻击,所以没有采用并发http请求方式,抓取效率一般。(基础数据一年更新一次,慢点应该也可以忍,关键是快了人家就把咱封了)

    2. http请求失败会重试3次,抓取过程只能全部完成才算完成,中间有错误只能从头开始。

    3. 抓取级别调细之后,需要很长时间抓取,且需要占用大量内存,请按需抓取。

    4. 本程序没有考虑多线程并发调用过程中的线程安全问题。(基础数据一年更新一次,没必要并发触发吧)

    5. 样例数据位于项目的data-examples目录,目前提供如下的几个结果:

      • 2021年,json形式,区县级别的txt格式数据

      • 2021年,flatten形式,街道级别的csv格式数据

      • 2009年,json形式,区县级别的txt格式数据

        欢迎大家继续提供样例数据。互帮互助,节省宝贵时间。

    许可证

    hutool和本程序采用木兰公共许可证, 第2版

    jsoup采用MIT许可证

    对商业项目友好。

    其他

    数据不涉密,都是统计局网站上的公开数据。程序只是负责整理了一下。

    项目地址:https://github.com/zhiguangliu/area-reptile-from-stats-gov-cn

  • 相关阅读:
    JDBC(一)
    【瑞萨零基础入门】瑞萨MCU零基础入门系列教程(更新连载中)
    ROS2 学习笔记(三) 工作空间与功能包的创建
    elasticsearch-head 连接ES出现401问题解决
    php后端+JQuery+Ajax简单表单提交
    Docker 搭建 Minio 容器
    【无标题】
    【牛客讨论区】第五章:kafka
    协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec
    Poco库使用:事件通知
  • 原文地址:https://blog.csdn.net/u013648515/article/details/126260650