相对于用于和采集 2016 版, 2017 版的 JS 代码做了比较大的优化和调整, 就开一遍文章来介绍这个 V2 版本. 老版本文章.
19-03-22 新采集了 2018 的城市数据
数据下载 GitHub:
数据预览
数据来源
国家统计局统计标准《2018 年统计用区划代码和城乡划分代码 (截止 2018 年 10 月 31 日)》, 截稿时是最新的.
数据采集
对于数据采集, 根据工作需要, 对于一些小的数据采集功能有些接触. 因为对 html 和 JS 熟些, 很早以前就用 IE 浏览器对本地 HTML 文件支持任意跨域 Ajax 请求数据, 和支持读写 Excel 文件, 就直接写一个 HTML 文件作为采集工具给别人使用, 批量查询人员资料, 考试结果什么的功能. 所以采集省市区数据主要用的 JS.
由于新版本 Chrome 对编码有问题, 统计局的是 gb2312, 会乱码, Chrome 41 古董版本没有问题, 所以采集都是在 chrome41 下完成的, 自己制作 Chrome 便携版实现多版本共存.
1. 抓取原始数据
涉及源码: 1_抓取国家统计局城市信息. JS
进入统计局页面, 执行代码即可完成抓取, 开了 4 个模拟的线程, 抓取省市区镇 4 级数据还是很快的, 采集了 3400 + 页面, 首次运行大概 1 分多钟完成采集 (我这个截图是开了浏览器缓存, 所以有 4 秒的假象, 编写本文时有个 url 挂逼了, 不知道是不是统计局服务器出了问题).
抓取完成后会自动弹出保存文件数据.
2. 拼音转换
这个需要找一个接口对文字进行拼音转换, 只有一个要求: 重庆能正常的翻译成 chong qing 即可, 翻译成 zhong qing 的就 low 了. 满足这个条件, 百度上搜索到的翻译小网站 99% 就被干掉了.
另外 GitHub 上很多 star 很高的开源库的转换表现也并不理想, 试过 hotoo/pinyin, 开了分词, 多音字的结果还是不是差了一点半点, 放弃了. 最后采用的 https://github.com/hankcs/HanLP 的 python 库来进行转换, 对地名多音字的支持还是有限的, 都字地名很多转换成 dou 囧, 不过在同类型里面算是最好的.
还是以前找到的翻译接口 https://www.qqxiuzi.cn/zh/pinyin / 对拼音的转换准确度最高, 据说依据《新华字典》,《现代汉语词典》等规范性辞书校对. 不过这个站从去年开始对 IP 会有限制, 以前是随便转换, 从 2017 版数据采集开始进行了克制处理, 整个翻译过程接口调用不超过 10 次, 中间可能需要换 1-3 次代理 (已实现用 JS 自动化切换代理).
转换过程
因为本次采集的数据量比较多, 省市区 3 级数据仅 3400 来条, 但包含了镇这级的 4.2 万多条数据, 转换压力有点大. 因此采取了省市区 3 级使用 qqxiuzi 的高准确度接口, 镇级的采用本地 HanLP 转换接口. 并且转换时采用全名称进行转换, 相比以前使用精简的短名多音字方面称更加准确.
本地用 HanLP 库进行转换一遍, 低准确度
涉及源码: 2_1_抓取拼音. JS
先打开拼音转换 python 服务, 服务程序在 GitHub 目录内, 根据介绍进行运行.
然后在刚才那个抓取页面里执行 JS 代码即可. 写稿时重新转了一遍, 用了 4 个模拟线程, 花了 5 分钟时间, 4.7 万条数据全部转完.
为啥不用 python 直接转, 非要走一遍 http 请求? 答: 不会写, 也方便不用本地搭建服务, 使用别的机器提供的接口 (我搭建了一个临时的拼音接口测试服务器, 可以测试).
使用 qqxiuzi 对省市区 3 级重新转换一遍, 高准确度
涉及源码: 2_2_抓取拼音. JS
在 http://www.qqxiuzi.cn/zh/pinyin / 运行代码, 然后根据提示导入上一步保存的数据即可, 再次运行代码即可, 如果被屏蔽 IP, 需要手动切换代理, 或者根据源码里面的提示设置 SwitchyOmega 自动切换代理.
整个转换过程大概需要 1 分钟左右, 查找有效代理慢的话可能需要更久.(源码里面缓存拼音结果部分代码错误, 等下次采集在修复吧, 写稿子时候发现的)
3. 处理数据和导出 CSV
涉及源码: 3_格式化. JS
处理数据就相对简单些了, 但花的时间最多, 因为要去分析数据. 额外添加了港澳台海外 4 个数据. 另外去掉民族自治区, 州, 县, 旗; 民族乡, 镇后缀. 还有去掉统计出来比较多的几个后缀, 市 | 县 | 镇 | 乡 | 街道 | 街道办事处 | 地区办事处 | 社区服务中心, 有些比较少的后缀没有去掉, 去掉有可能有些地名有歧义.
代码运行完成就自动弹出保存 CSV 文件数据了.
最后
数据下载和相关问题请到 GitHub 查看:
releases 内有处理好的 3 级或者 4 级 CSV 数据提供下载.
如果这个库有帮助到您, 请 Star 一下.
来源: https://www.cnblogs.com/xiangyuecn/p/10583865.html