前言
很多小伙伴后台私信我,我想要省市级JSON数据,我已经写了爬虫程序,叫运行下,也搞不定。今天就帮大家把文件爬取下来,免费分享给大家!
爬取关键代码
// 请求各省市县json数据
async function queryJson(list) {
if (!list.length) return;
let index = 1;
const all = list.length;
for (const item of JSON.parse(list)) {
// 一共3000多个,我就模拟前几个就行了 到 adcode = 411602 退出
// if (item.adcode === 411602) {
// console.log("【结束】");
// break;
// }
// const url =
// item.level === "district"
// ? `https://geo.datav.aliyun.com/areas_v3/bound/${item.adcode}.json`
// : `https://geo.datav.aliyun.com/areas_v3/bound/${item.adcode}_full.json`;
// 暂时不考虑 地级市的情况,先爬取 省市级的数据
if (item.level === "district") continue;
const url = `https://geo.datav.aliyun.com/areas_v3/bound/${item.adcode}_full.json`;
// 解析完整的父级名称,直到 parent 为 100000,得到的名称示例 北京市-大兴区
let parentName = "";
var cItem = item;
while (cItem.parent !== 100000) {
if (!cItem.parent) break;
const parent = JSON.parse(list).find((i) => i.adcode === cItem.parent);
parentName = `${parent.name}-${parentName}`;
cItem = parent;
}
const name = `${item.adcode}-${parentName}-${item.name}`;
try {
const { data } = await axios.get(url);
// 输出正在请求的 序号 和总数
console.log(`正在请求 ${index}/${all} ==> ${name}.json`);
// 还要分离 省市县 到不同的文件
saveJson(data, name, item.level);
index++;
} catch (error) {
throw new Error("请求出错");
}
}
}
在实际请求过程中,发现有些城市是 city 类型,但是请求的地址却不需要 full ,例如济源市:
因此,需要添加重试逻辑:
console.error("【请求出错】==> ", item.level, item.name, item.adcode);
// 正在重试...
try {
const url = `https://geo.datav.aliyun.com/areas_v3/bound/${item.adcode}.json`;
const { data } = await axios.get(url);
console.error(`正在重试请求 ${index}/${all} ==> ${name}.json`);
// 还要分离 省市县 到不同的文件
saveJson(data, name, item.level);
console.error("【重试请求成功!】");
} catch (error) {
console.error(`【重试失败!,需要手动处理】`, item.level, item.name, item.adcode);
}
世界json文件
资源地址
爬取源码
puppeteer-demo: Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。无头模式 headless 是否标记无头模式,在创建 browser 是传入配置项实现对浏览器无头模式的控制https://gitee.com/wfeng0/puppeteer-demo相关文章
Puppeteer 使用教程-基础篇(超详细、超全面)-CSDN博客文章浏览阅读6.8k次,点赞8次,收藏32次。Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。本文涉及了Puppeteer常见常用的API样例,包括爬取图片、视频、cookies设置,字符输入等多方面知识,很全面哦。_puppeteerhttps://blog.csdn.net/weixin_47746452/article/details/131751015?spm=1001.2014.3001.5501Puppeteer 使用教程-实战篇(爬取图片、视频、音频,页面数据)_puppeteer 爬取页面数据、图片、视频、音频-CSDN博客文章浏览阅读1.9k次,点赞4次,收藏9次。续上篇,我们简单讲述一下puppeteer常见的应用场景,包括静态页面数据获取,网络请求获取截取、图片、视频资源下载、自动化测试等,看了绝对有收获。_puppeteer 爬取页面数据、图片、视频、音频https://blog.csdn.net/weixin_47746452/article/details/131762512?spm=1001.2014.3001.5501相关json 数据
puppeteer-demo: Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行,但是可以通过修改配置文件运行“有头”模式。无头模式 headless 是否标记无头模式,在创建 browser 是传入配置项实现对浏览器无头模式的控制 - Gitee.comhttps://gitee.com/wfeng0/puppeteer-demo/tree/master/map-json
说明
目前仅是爬取了省市级数据,基本上够用了,我看了下,如果将地级市数据也爬取的话,一共有3238个,在实际的项目中,仅展示地级市的数据好像也没意义,因此这里不做深究,如果实在需要,可以私信,帮大家弄。
相关文章
发表评论