zoukankan      html  css  js  c++  java
  • 从统计局采集最新的省市区镇数据,用js在浏览器中运行 V2

    本文描述的是对国家统计局于2019-01-31发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》的采集。

    相对于用于和采集2016版2017版的js代码做了比较大的优化和调整,就开一遍文章来介绍这个V2版本。老版本文章。随着时间变化,本文内容会逐渐变旧或失效,请到GitHub仓库查阅最新更新数据。

    本文更新(移步查阅):
    19-04-15 新采集了2018的省市区三级坐标和行政区域边界
    19-03-22 采集了2018的城市数据

    数据下载 GitHub:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov/releases

    数据预览

    数据来源

    国家统计局统计标准《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》,截稿时是最新的。

    数据采集

    对于数据采集,根据工作需要,对于一些小的数据采集功能有些接触。因为对htmljs熟些,很早以前就用IE浏览器对本地html文件支持任意跨域ajax请求数据、和支持读写Excel文件,就直接写一个html文件作为采集工具给别人使用,批量查询人员资料、考试结果什么的功能。所以采集省市区数据主要用的js

    由于新版本chrome对编码有问题,统计局的是gb2312,会乱码,chrome 41古董版本没有问题,所以采集都是在chrome41下完成的,自己制作Chrome便携版实现多版本共存

    1. 抓取原始数据

    涉及源码:1_1_抓取国家统计局城市信息.js

    进入统计局页面,执行代码即可完成抓取,开了4个模拟的线程,抓取省市区镇4级数据还是很快的,采集了3400+页面,首次运行大概1分多钟完成采集(我这个截图是开了浏览器缓存,所以有4秒的假象,编写本文时有个url挂逼了,不知道是不是统计局服务器出了问题)。

    抓取完成后会自动弹出保存文件数据。

    2. 拼音转换

    这个需要找一个接口对文字进行拼音转换,只有一个要求:重庆能正常的翻译成chong qing即可,翻译成zhong qing的就low了。满足这个条件,百度上搜索到的翻译小网站99%就被干掉了。

    另外Github上很多star很高的开源库的转换表现也并不理想,试过hotoo/pinyin,开了分词,多音字的结果还是不是差了一点半点,放弃了。最后采用的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服务,服务程序在Githubassets/pinyin-python-server目录内,根据介绍进行运行。

    然后在刚才那个抓取页面里执行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查看:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov

    releases内有处理好的3级或者4级 csv数据提供下载。

    如果这个库有帮助到您,请 Star 一下。

  • 相关阅读:
    UVA12125 March of the Penguins (最大流+拆点)
    UVA 1317 Concert Hall Scheduling(最小费用最大流)
    UVA10249 The Grand Dinner(最大流)
    UVA1349 Optimal Bus Route Design(KM最佳完美匹配)
    UVA1212 Duopoly(最大流最小割)
    UVA1395 Slim Span(kruskal)
    UVA1045 The Great Wall Game(二分图最佳匹配)
    UVA12168 Cat vs. Dog( 二分图最大独立集)
    hdu3488Tour(KM最佳完美匹配)
    UVA1345 Jamie's Contact Groups(最大流+二分)
  • 原文地址:https://www.cnblogs.com/xiangyuecn/p/10583865.html
Copyright © 2011-2022 走看看