node|node.js 爬取腾讯地图API全国行政区数据
使用 vue + element cascader级联选择器做城市选择器(可查看另一篇文章),需要全国行政区数据。
github地址:https://github.com/username-xu/node.js-districts
const fs = require('fs')// 请求模块,文档可参考:https://www.jianshu.com/p/1432e0f29abd
const superagent = require('superagent')const main = () => {
getAllDistrict();
}// 获取全部数据
const getAllDistrict = async () => {
let list = [];
// 接口地址: https://lbs.qq.com/webservice_v1/guide-region.html
// key值,需要注册腾讯地图账号(https://lbs.qq.com/index.html)获取const url = 'https://apis.map.qq.com/ws/district/v1/list?key=****';
try{
list = (await superagent.get(url)).body.result;
} catch(err) {
console.log(err)
}getSheng(list);
}// 获取省级数据
const getSheng = list => {
let data = https://www.it610.com/article/[];
list[0].forEach((v) => {
let shengItem = {
value: v.id,
label: v.fullname,
children: []
}data.push(getShi(list, shengItem));
});
output(data);
}// 获取市级数据
const getShi = (list, shengItem) => {list[1].forEach((v) => {
let shengSign = shengItem.value.slice(0, 2);
let shiSign = v.id.slice(0, 2);
if(shengSign === shiSign){
let shiItem = {
value: v.id,
label: v.fullname,
children: []
}shengItem.children.push(getQu(list, shiItem));
}
});
return shengItem;
}// 获取区级数据
const getQu = (list, shiItem) => {list[2].forEach((v) => {
let shiSign = shiItem.value.slice(0, 4);
let qusign = v.id.slice(0, 4);
if(shiSign === qusign){shiItem.children.push({
value: v.id,
label: v.fullname
});
}
});
// 若市级下没有区,删除 children
if(!shiItem.children.length){
delete shiItem.children;
}return shiItem;
}// 输出
const output = data => {
let dataStr = JSON.stringify(data);
fs.writeFileSync(
'cities.js',
dataStr,
function(err){
if(err){
console.log('输出失败')
}
})
}main();
【node|node.js 爬取腾讯地图API全国行政区数据】
推荐阅读
- Node.js中readline模块实现终端输入
- 使用协程爬取网页,计算网页数据大小
- Python实战计划学习笔记(9)为大规模爬取准备
- 爬取网易云音乐
- Promise|Promise 异步控制流
- Nginx进阶(1)——nginx本地代理配置访问node服务
- 脚手架开发
- 带你了解NodeJS事件循环
- vue使用vue-cli新建项目
- Node入门教程(11)第九章(Node|Node入门教程(11)第九章:Node 的网络模块)