一、问题背景

许多信息统计,均需基于全国最新行政区划数据。按照中华人民共和国行政区划代码标准(GB/T 2260),各行政区划至少有编码和名称两个子项。编码由6位数字组成,通过一定规则代表省、市、县三级。最新数据可以通过国家统计局官方网站(网址:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/)下载得到。

本文讨论的案例,就是利用Kettle(版本号:7.0)从官网上下载数据,并转为结构化数据存储。

二、输入输出

输入数据来自互联网,数据为截止2016年7月31日的最新县及县以上行政区划代码。网址:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html。下面是网站截图(图1):

输出数据为文本文件,包含一个文件头行,以及包含编码、名称两个字段的3508行数据。下图为输出文件截图(图2):

三、主要步骤

以下将逐一解释用到的主要转换步骤。解决方案包括如下5个步骤:首先通过互联网下载网页中的原始数据,然后解析其中有用的数据块,并对数据块进行简单清洗,然后将数据块转为行集,最终逐行提取需要的字段数据。

1、下载网页数据

通过核心对象/查询类别中的“HTTP client”步骤,可以下载到网页原始数据。注意该步骤必须有输入流方可执行,所以一般在前面增加一个步骤,用于提供URL地址的输入行集。本例只需设置字符编码和结果字段名即可,主要配置见下图(图3),选择了UTF-8编码,结果字段名webResult。

2、解析数据部分

通过上一步骤,网页的数据将保存到名为webResult的字段中。在调试阶段可以将数据拷贝到记事本中,分析找到数据区域的规律。为了简化起见,将无关数据用省略号代替,主要数据如下图(图4)所示。

如上图两个红色框图部分所示,本例需要的数据区域有如下规律。

  • 开头部分为:

<span lang="EN-US">110000<span>

  • 结尾部分为:

澳门特别行政区</span></b></p></div></div></div>

可以利用核心对象/脚本类别中的“正则表达式”步骤来解析其中的数据块部分,该步骤配置的核心内容就是正则表达式,务必要确保正则表达式与内容全部匹配,并且捕获分组到指定字段。结合上述分析,我们可以将正则表达式设置为:

[\s\S]*(<p><b><span>110000[\s\S]*澳门特别行政区</span></b></p></div></div></div>)[\s\S]*

具体配置如下图(图5)所示:

通过本步骤,可以将输入步骤中的webResult字段中的数据块内容,截取到body1字段中。

3、原始数据处理

通过上述步骤,得到body1字段中的数据块具备一些特殊特征。从图1可以看出,统计局网站对省一级数据进行了加粗显示,HTML中包含许多省级数据的特殊<b></b>标记。为了避免针对省级行政区划代码的特殊处理,需要清洗掉这些特殊标记。可以选择核心对象/转换类别中的“字符串替换”步骤,讲此类特殊标记清除。主要配置如下图(图6):

通过字符串替换步骤,可以将清洗后的数据保存到body2字段中。

4、数据块转记录

通过上述步骤,可以得到一个相对比较纯净的数据块。如下图(图7)所示:

为简洁起见,大部分数据用省略号代替。关键问题在于,如何将一块数据变成一行一行的信息。可以利用核心对象/转换类别中的“列拆分为多行”步骤,将块数据变成行集,而该步骤的关键又在于寻找拆分列的规律。如图7中红色部分所标识,本例中拆分的特征是</p>字符串,通过它可以将块拆分出行。具体设置如下图:

通过拆分行步骤,所有数据将拆分到data1字段中。通过Kettle的预览视图,可以看到下图所示结果:

可以看出,数据已经成功拆分为每个行政区一行记录。

5、有用信息萃取

最后一个关键问题在于如何从data1字段中将地区代码和地区名称得到。同样,利用核心对象/脚本类别中的“正则表达式”步骤可以轻松将需要数据解析,关键还是在于正则表达式。通过对数据规律的分析,配置表达式如下:

.*?<span lang="EN-US">([\S]*?)<span>[\s\S]*?<span style="font-family: 宋体">([\S]*?)</span>.*

这样,地区代码和地区名称分别成为两个分组。详细配置如下图:

由于文本文件导出等其他步骤都相对简单,本文不再赘述。

四、总结

本文通过互联网数据的下载、清洗、解析,完成了一个典型的文本数据块到行集的信息获取,其他类似需求均可参考。

如需原始转换文件,请联系微信号carol_sxh获取,添加好友时请注明所需文件名(KettleSample001.ktr)。

【注意】本文转自博主公众号“Kettle博士”,本公众号所发文章皆为原创,如转载请注明出处及作者。

微信扫一扫,关注该公众号

使用Kettle从国家统计局下载行政区划代码数据相关推荐

  1. 2020年行政区划代码_2020年柳州市行政区划,了解柳州市有几个区,详细数据

    本文通过整理了柳州市行政区划代码数据及柳州市统计用的城乡划分代码,带你了解柳州市有几个区.县及下面的街道和镇划分详细情况. 柳州市有几个区.县.县级市? 答:柳州市有5个区.5个县(行政区划2020年 ...

  2. 2020年行政区划代码_2020年梧州市行政区划,了解梧州市有几个区,详细数据

    本文通过整理了梧州市行政区划代码数据及梧州市统计用的城乡划分代码,带你了解梧州市有几个区.县.县级市及下面的街道和镇划分详细情况. 梧州市有几个区.县.县级市? 答:梧州市有3个区.3个县.1个县级市 ...

  3. 2020年行政区划代码_2020年南宁市行政区划,了解南宁市有几个区,详细数据

    本文通过整理了南宁市行政区划代码数据及南宁市统计用的城乡划分代码,带你了解南宁市有几个区.县及下面的街道和镇划分详细情况. 南宁市有几个区.县? 答:南宁市有7个区.5个县(行政区划2020年7月). ...

  4. 如何得到最新、权威的全国县级以上行政区划代码

    行政区划代码是国家用于统计地域相关数据的重要参考,高德.百度的地图API也都有这个代码与GPS坐标之间的相互解析.如果我们的应用和地域相关,不妨直接用这套编码,既通用又方便. 然而很多人不知道这个代码 ...

  5. 免费下载_最新行政区划代码省市区数据(2020年6月)

    我用阿里云盘分享了「全国行政区划代码_完整.xlsx」,你可以不限速下载 复制这段内容打开「阿里云盘」App 并保存即可获取 链接:https://www.aliyundrive.com/s/XuXp ...

  6. 分析国家统计局行政区划代码(省市区数据)生成SQL

    以前写过一个类似的小程序,分析统计局行政区划代码,然后生成SQL,最近项目又要用到这东西,于是根据 GB/T 2260-2007 重写了一次,没用多少时间,有需求的朋友可以拿去用. package d ...

  7. 2022年最新全国各省五级行政区划代码及名称数据(省-市-区县-乡镇-村)

    1.数据来源:国家统计局 2.官方更新时间:2021年10月31日 3.数据样例: 包括字段:省份名称.城市代码.城市名称.区县代码.区县名称.乡镇街道代码.乡镇街道名称.居委会村代码.城乡分类代码. ...

  8. 使用java爬取国家统计局的12位行政区划代码

    前言: 本文基于j2ee的原始url进行都写,解析指定内容时也是使用很傻的形式去查找指定格式的字符串来实现的. 更优雅的方式是可以使用apache的HttpClient和某些文档模型将HTML字符串构 ...

  9. 最新全国区划代码-2022年全国各省五级行政区划代码及名称数据(省-市-区县-乡镇-村)

    本数据基于JAVA爬取国家统计局行政区划代码,可找我获取源码以及SQL 1.数据来源:2022年国家统计局区划代码 2.官方更新时间:2022年10月31日 3.数据样例: 包括字段:省份名称.城市编 ...

  10. 行政区划代码查询-完整提供 Demo 代码示例及数据专业且全面的 API 查询接口

    更多资料请参考:www.woyaocha.net/product/area 接口描述 功能描述 根据行政区划代码获取行政区划名称,或者根据行政区划名称获取行政区划代码. URL 示例 1)http 协 ...

最新文章

  1. 滴滴大整改:9月8日至15日暂停深夜叫车服务
  2. 设计非常优秀的软件界面
  3. 公司行为(Corporate Actions)
  4. WCF系列(1)—— CustomBehavior 入门
  5. PHP Yii2 composer环境安装
  6. 【Python系列】之2:列表和元组
  7. 有意思的clip-path
  8. redis watchdog_干货:Redis分布式锁的原理以及如何续期
  9. javascript 函数传参
  10. FlightGear编译
  11. 麻省理工成立金融科技实验室,蚂蚁金服成唯一中国创始企业
  12. linux steam安装目录,如何在Ubuntu Linux上下载和安装Steam
  13. sql server 代理权限问题
  14. 我的世界光影mod怎么用_国际版minecraft mod和光影教程
  15. 服务器显示没有权限设置,服务器没有管理员权限设置
  16. Appium+Python使用-模拟手机按键操作
  17. 一个批处理:IPC$ Password Crack---BAT
  18. 请不要在该奋斗的年纪选择了安逸
  19. 微信公众号支付宝授权
  20. Linux服务.NO7——samba

热门文章

  1. oracle复杂sql 分页,oracle sql 分页
  2. 通信信道带宽为1Gbit/s,端到端时延为10ms。TCP的发送窗口为65535字节。试问: 可能达到的最大吞吐量是多少?信道的利用率是多少?
  3. iPhone--卡贴是什么
  4. DNA测序技术发展史:一代、二代、三代测序技术简要原理及比较
  5. 好用的影子系统软件,系统辅助工具
  6. Chain ‘MASQUERADE‘ does not exist 报错解决
  7. panel组件学习(1)常见属性学习
  8. ActiveMQ学习三-持久化订阅
  9. r library car_医学统计与R语言:协方差分析(ANCOVA)+plus
  10. Iexplore.exe[XXXX]中发生未处理的win32异常”解决办法