本文是好长时间前写的,想着边操作边记录,结果… 大家也知道——失败了!!!
原因就是:有人在github上开源了最新最全的数据,自己便放弃倒腾了,抓紧时间复命去了,以下本想着删掉,但还是于心不忍,作为一个失败的经历发出来。
本文只是获取到省市县的 JSON 结构的字符串,并无后续处理数据
不喜欢看的就直接拉到最后
我的需求场景
项目需要获取省市县联动,行政隶属规划今年也变动频繁,但现在没有最新的数据集。数据采集我也不会啊(暗自流泪)。
我现在的问题是怎么获取比较权威的最新数据,网上点点点终于找到这种投机取巧的方式——从政务网获取。
全国行政区划信息查询平台:http://xzqh.mca.gov.cn/map
注意事项
- 若网站结构变更的话就不是本文的适用范围了(都是扯淡,反正失败了)
- 收集的只有省市县三级行政区划信息。
- 包含拼音、简拼和全拼。
该网站页面分析
点开页面可以看到如下图所示,页面js也是没有压缩,可以很好的分析它渲染的逻辑。
获取级联数据
发现数据
可以看到页面提供了一个检索功能,输入一个字符下拉框会立马渲染出符合该字符的选项。
所以只需要获取行政区划码和区划名称等其他相关信息就能满足我的需求
数据结构分析
另外行政区划码是有规律的:详情百度百科
第一、二位表示省(自治区、直辖市、特别行政区)。
第三、四位表示市(地区、自治州、盟及国家直辖市所属市辖区和县的汇总码)
{cName: "北京市", code: "110000", py: "Beijing Shi", jp: "bjs", qp: "BeijingShi"}
右键检查一下调出开发工具,可以看到如下,注意一下框选的内容
该 form 是检索的 form 控件,其中隐藏的 input 控件的值就是全部是级联数据(纳尼!!刊-单是滴<かんたんすぎ>)
到此不敢相信自己的眼睛,
开搞开搞
- 其详细细节如下图
- 检查是否支持jQuery,控制台输入『
$
』 然后按回车 。喔~~支持 - 发现这个 input 居然有 id,其 id 值是 ”pyArr“
- 使用
$("#pyArr").val()
就能获取到字符串为,数据结构为 JSON 的数据了
接下来就是瞎折腾这 3213 条数据。
var str = $("#pyArr").val();
var arrjson = JSON.parse(str);
arrjson.length
arrjson[0]
转为sql语句
假使区划表为 ‘xzqh’ 表,对应sql 提取的js 如下
var sql = "";
arrjson.forEach(function (v) {
let ks = [],vs = [];
for (let k in v) {
ks.push(k);
vs.push(v[k]);
}
// 因为部分拼音或汉字名称中有英文单引号分割,不能使用英文单引号
let str = "insert into xzqh ("+ks.join()+") values(\""+vs.join("\",\"")+"\");\r\n"
sql += str;
});
console.log(sql);
最后得到如下的(有省略)
insert into xzqh (cName,code,py,jp,qp) values(“北京市”,“110000”,“Beijing Shi”,“bjs”,“BeijingShi”);
insert into xzqh (cName,code,py,jp,qp) values(“东城区”,“110101”,“Dongcheng Qu”,“dcq”,“DongchengQu”);
insert into xzqh (cName,code,py,jp,qp) values(“西城区”,“110102”,“Xicheng Qu”,“xcq”,“XichengQu”);
…
获取村、街道的数据
我无能为力,github 上有 modood 大神给出了数据
https://github.com/modood/Administrative-divisions-of-China
不喜欢看项目只想打包下载数据的可直接下载 sqllite3文件 data.sqllite (使用 Navicat 可直接打开)