国家统计局2020年最新省/市/县json数据(不包含港澳台)
国家统计局相应网址:国家统计局2020年全国统计用区划代码和城乡划分代码
因为不会python,所以我是一个一个网址去用js爬出来的。这样有点low。。。不过我觉得js爬数据的话应该是有更好的方法的,但是我想不出了,还请大佬勿喷。
我把各级数据的获取的相关js代码放到文章末尾了,有需要的可以看一下,多多交流。有啥写的不好的地方烦请各位指点一二。
全部数据
因为全部展示出来之后页面加载很慢,所以我上传到了网盘里了,大家自提吧。
链接:https://pan.baidu.com/s/13Nnzg7DpUwUV75R9I3dx_w
提取码:2020
数据说明
[
{
"n": "北京市", // 最外层的 `n` 是省级名称
"c": [ // 市级数据(部分省份的下属只有一个市级,比如北京、天津...)
{
"v": "110100000000", // 第二层的 `v` 是市级代码编号
"n": "市辖区", // 第二层的 `n` 是市级名称
"c": [ // 县级数据
{
"v": "110101000000", // 第三层的 `v` 是县级编号
"n": "东城区" // 第三层的 `n` 是县级名称
},
{
"v": "110102000000",
"n": "西城区"
},
... // 最内层也就是县级数据。是一行省略号(...)
]
}
]
},
{
"n": "河北省",
"c": [
{
"v": "130100000000",
"n": "石家庄市",
"c": [
{
"v": "130101000000",
"n": "市辖区"
},
...
]
},
{
"v": "130200000000",
"n": "唐山市",
"c": [
{
"v": "130201000000",
"n": "市辖区"
},
...
]
},
... // 第二层也就是市级数据。是两行省略号(...)
...
]
},
... // 最外层也就是省级数据。是三行省略号(...)
...
...
]
获取省级数据
http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/
// 在上述页面下的浏览器控制台输入后获取省级数据
let provinces = document.getElementsByClassName('provincetr');
let val = [];
for(let i = 0; i< provinces.length; i++){
for(let j = 0; j < provinces[i].children.length; j++) {
val.push({
"n": provinces[i].children[j].children[0].innerText.slice(0, -1), // 省份名称
"c": [] // 市级数据的集合
});
}
}
val.pop(); // 删除页面上最后一个为空的元素
window.localStorage['val'] = JSON.stringify(val); // 存到localStorage中,方便一会拿取
console.log(window.localStorage['val']);
/* 数据样式:
[
{"n":"北京市","c":[]},
{"n":"天津市","c":[]},
{"n":"河北省","c":[]},
{"n":"山西省","c":[]},
{"n":"内蒙古自治区","c":[]},
{"n":"辽宁省","c":[]},
{"n":"吉林省","c":[]},
{"n":"黑龙江省","c":[]},
{"n":"上海市","c":[]},
{"n":"江苏省","c":[]},
{"n":"浙江省","c":[]},
{"n":"安徽省","c":[]},
{"n":"福建省","c":[]},
{"n":"江西省","c":[]},
{"n":"山东省","c":[]},
{"n":"河南省","c":[]},
{"n":"湖北省","c":[]},
{"n":"湖南省","c":[]},
{"n":"广东省","c":[]},
{"n":"广西壮族自治区","c":[]},
{"n":"海南省","c":[]},
{"n":"重庆市","c":[]},
{"n":"四川省","c":[]},
{"n":"贵州省","c":[]},
{"n":"云南省","c":[]},
{"n":"西藏自治区","c":[]},
{"n":"陕西省","c":[]},
{"n":"甘肃省","c":[]},
{"n":"青海省","c":[]},
{"n":"宁夏回族自治区","c":[]},
{"n":"新疆维吾尔自治区","c":[]}
]
*/
获取市级数据
/*
在获取各级别数据时尽量按顺序来,以防漏放错放
每换一个省之后都需要把:
return el.n === 'XXX' 中的XXX替换成新的省份名。
ex:获取完北京市的市级数据后,在获取天津市的时候需要修改XXX为 `天津市` 这一省份名称
*/
// 以北京市为例
let val = JSON.parse(window.localStorage['val']);
let index = val.findIndex((el) => {
return el.n === '北京市'; // 省份名称
});
val[index].c = []; // 先进行清空以防重复添加
let cities = document.getElementsByClassName('citytr');
for(let i = 0; i < cities.length; i++){
val[index].c.push({
"v": cities[i].firstChild.children[0].innerText, // 市级代码
"n": cities[i].lastChild.children[0].innerText, // 市级名称
"c": [] // 县级数据集合
});
}
window.localStorage['val'] = JSON.stringify(val); // 存到localStorage中,方便一会拿取
console.log(JSON.stringify(val));
/* 数据样式:
[{"n":"北京市","c":[{"v":"110100000000","n":"市辖区","c":[]}]},{"n":"天津市","c":[]},{"n":"河北省","c":[]},{"n":"山西省","c":[]},{"n":"内蒙古自治区","c":[]},{"n":"辽宁省","c":[]},{"n":"吉林省","c":[]},{"n":"黑龙江省","c":[]},{"n":"上海市","c":[]},{"n":"江苏省","c":[]},{"n":"浙江省","c":[]},{"n":"安徽省","c":[]},{"n":"福建省","c":[]},{"n":"江西省","c":[]},{"n":"山东省","c":[]},{"n":"河南省","c":[]},{"n":"湖北省","c":[]},{"n":"湖南省","c":[]},{"n":"广东省","c":[]},{"n":"广西壮族自治区","c":[]},{"n":"海南省","c":[]},{"n":"重庆市","c":[]},{"n":"四川省","c":[]},{"n":"贵州省","c":[]},{"n":"云南省","c":[]},{"n":"西藏自治区","c":[]},{"n":"陕西省","c":[]},{"n":"甘肃省","c":[]},{"n":"青海省","c":[]},{"n":"宁夏回族自治区","c":[]},{"n":"新疆维吾尔自治区","c":[]},{"n":"","c":[]}]
*/
获取县级数据
let val = JSON.parse(window.localStorage['val']); // 从localStorage中获取数据
let index1 = val.findIndex((el) => {
return el.n === 'XXX'; // 每换一个新的省之后都需要把 XXX 替换成新的省份名。
});
let urlIndex = Number(window.location.pathname.split('/')[6].split('.')[0]);
let index2 = 0;
for(let j in val[index1].c){
if(val[index1].c[j].v.substring(0, 4) == urlIndex){ // 根据url末尾的值与localStorage中的市级的代码值 `v` 进行对比,相同则将序号赋值给index2
index2 = j;
}
}
val[index1].c[index2].c = [];
// 部分县级的class有变化,目前我发现的有这两种,应该是没其他的了,不过保不齐我可能眼花了一下。。。
let counties = document.getElementsByClassName('countytr').length == 0 ? document.getElementsByClassName('towntr') : document.getElementsByClassName('countytr');
for(let i = 0; i < counties.length; i++){
val[index1].c[index2].c.push({ // 部分县级名称为市辖区,是没有下级数据的,所以用三元表达式进行了一下判断,举例如下图
"v": counties[i].firstChild.children[0] == undefined ? counties[i].firstChild.innerText : counties[i].firstChild.children[0].innerText,
"n": counties[i].lastChild.children[0] == undefined ? counties[i].lastChild.innerText : counties[i].lastChild.children[0].innerText
});
}
window.localStorage['val'] = JSON.stringify(val);
console.log(val);
然后就是一直选择新的地区反复执行相关代码,最终在localStorage中就会有所有的数据了。很繁琐,大家就当作参考好了。