UNPKG

china-admin-area

Version:

中华人民共和国行政区域数据,适配element-ui antd级联组件

127 lines (118 loc) 3.39 kB
const cheerio = require('cheerio') const md5 = require('md5') const fs = require('fs') const request = require('superagent') require('superagent-charset')(request) const version = '2020' async function getPage(url) { let content = '' const id = md5(url) const file = `./temp/${id}.html` if (fs.existsSync(file)) { content = fs.readFileSync(file, 'utf-8') } else { await request.get(url) .buffer(true) .charset("gbk") .then(function (res) { content = res.text; fs.writeFileSync(file, content) }) .catch((err) => { console.log(err) }) } return content } ; (async () => { const cityIds = [] const rs = { '86': {} } const level0 = await getPage( `http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/${version}/index.html`) const $ = cheerio.load(level0) const list = $('.provincetr td a') const provinces = [] const urls = [] list.each((index, el) => { const url = `http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/${version}/${$(el).attr('href')}` const data = { id: $(el).attr('href').split('.')[0] + '0000', name: $(el).text() } rs['86'][data.id] = data.name urls.push(url) }) // 市级 for (const url of urls) { const level1 = await getPage(url) const $ = cheerio.load(level1) const list = $('.citytr td a') const countyUrls = [] list.each(async (index, el) => { const url = `http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/${version}/${$(el).attr('href')}` // filter number const text = $(el).text() if (!/\d+/.test(text)) { const data = { id: $(el).attr('href').split('.')[0].slice(3) + '00', name: $(el).text() } const parentId = data.id.slice(0, 2) + '0000' if (!rs[parentId]) { rs[parentId] = {} } cityIds.push(data.id) rs[parentId][data.id] = data.name } countyUrls.push(url) }) // 区县 for (const _url of countyUrls) { const level2 = await getPage(_url) const $ = cheerio.load(level2) const list = $('.countytr td, .towntr td') list.each(async (index, el) => { const link = $(el).find('a') let data = {} if (link.length) { if (!/\d+/.test($(el).text())) { data = { id: $(link[0]).attr('href').split('.')[0].split('/')[1], name: $(el).text() } } } else { if (!/\d+/.test($(el).text())) { data = { id: $(list[index - 1]).text().replace(/0+$/g, ''), name: $(el).text() } } } if (data.id) { const parentId = data.id.slice(0, 4) + '00' if (!rs[parentId]) { rs[parentId] = {} } rs[parentId][data.id] = data.name } }) } } setTimeout(() => { fs.writeFileSync('../data.json', JSON.stringify(Object.assign({}, rs), null, 2)) fs.writeFileSync('./data.json', JSON.stringify(Object.assign({}, rs), null, 2)) const _2levelCityIds = cityIds.filter(c => { return Object.keys(rs[c] || {}).length > 0 }) fs.writeFileSync('./only_2_level_city_id.json', JSON.stringify( _2levelCityIds, null, 2)) console.log('done') process.exit(0) }, 6000) })()