数据源:中华人民共和国国家统计局官方网站
完全按照统计局的数据编码规则,不做任何转换。
按照统计局页面命名,分别将数据编码为:
| 级别 | 省(区、直辖市) | 市 | 区县、乡 | 街道、镇 | 村、居委会 |
|---|---|---|---|---|---|
| 编码 | 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