数据源:中华人民共和国国家统计局官方网站
统计局数据特点描述
- 统计局每年10月31日更新一次数据。
- 统计局的数据分为省,市,区县、乡,街道、镇,村、居委会共五级。
- 省级编码为两位,其余均为12位。前六位编码规则与身份证相同,其余编码规则不明,欢迎知道的朋友补充。
- 村、居委会的城乡编码具体业务含义不清楚,欢迎知道的朋友补充。
系统设计特点
-
完全按照统计局的数据编码规则,不做任何转换。
-
按照统计局页面命名,分别将数据编码为:
级别 省(区、直辖市) 市 区县、乡 街道、镇 村、居委会 编码 PROVINCE CITY COUNTY TOWN VILLAGE -
提供json(children标识主子结构)和flatten(code,pCode标识主子关系)两种输出结构。
-
静态方法直接调用。
// 获取json格式的数据,2021年的,到街道级别 AreaReptileUtil.doCrawlJson("2021", AreaLevel.TOWN); // 获取flatten格式的数据,2021年的,到街道级别 AreaReptileUtil.doCrawlFlat("2021", AreaLevel.TOWN);
-
轻量级,依赖仅有hutool(用于发http请求)和jsoup(用于解析html)。
-
提供debug模式(仅解析北京、天津、河北三省的详细数据)用于调试。 注意,该配置全局有效,默认为关闭状态
AreaReptileUtil.setDebugMode(true); List<AreaNode> areaNode = AreaReptileUtil.doCrawlJson("2009", AreaLevel.COUNTY);
-
有下级数据的,会附带下级数据的对应页面。
-
输出结果为utf-8编码
注意
-
统计局网站有防ddos攻击,所以没有采用并发http请求方式,抓取效率一般。(基础数据一年更新一次,慢点应该也可以忍,关键是快了人家就把咱封了)
-
http请求失败会重试3次,抓取过程只能全部完成才算完成,中间有错误只能从头开始。
-
抓取级别调细之后,需要很长时间抓取,且需要占用大量内存,请按需抓取。
-
本程序没有考虑多线程并发调用过程中的线程安全问题。(基础数据一年更新一次,没必要并发触发吧)
-
样例数据位于项目的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