国家行政区数据获取三种方式:爬虫、调用API、私有化部署

本文主要是介绍国家行政区数据获取三种方式:爬虫、调用API、私有化部署,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

国家行政区数据获取三种方式:爬虫、调用API、私有化部署

背景

现实情况,在信息系统开发、电子商务平台、app等等相关软件开发,都会设计到行政区数据联动,但是如何获取最新、准确的数据呢?
在这里给各位推荐三种获取方式

一、Python国家行政区数据爬取示例【源码可运行】

这里里给初学者、有需要的人提供一个数据抓取的脚本,有效、可运行,将抓取的数据写入到本地csv文件中
不废话,上代码:

  • 注意:改代码可以抓取:省、市、区、乡镇街道、村社区 五级完整行政区,由于村社区数量比较大,抓取方法调用被注释了,有需要的可以取消注释
from bs4 import BeautifulSoup
import csv
import re
import requestsclass XingZhengQu(object):def __init__(self):self.session = requestsself.initCsvWriter()def initCsvWriter(self):self.csvFile = open('xingzhengqu.csv', 'w')self.csvWriter = csv.writer(self.csvFile)self.csvWriter.writerow(['行政代码','名称','层级','类型'])def csvWriteRow(self,row):self.csvWriter.writerow(row)# 省def getProvice(self):url='http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2022/index.html'resp = self.session.get(url)resp.encoding='utf-8'soup = BeautifulSoup(resp.text, 'lxml')a = soup.select('table.provincetable > tr.provincetr > td >a')for item in a:proviceUrl = item.get('href')pid = re.findall("([0-9]+)\.html",proviceUrl)print('--',pid,proviceUrl)code = pid[0].ljust(12,'0')print('{}-{}-{}'.format(code,item.get_text(),1))row =[code,item.get_text(),1,'']self.csvWriteRow(row)cityUrl = '{}/{}'.format(url.rsplit('/',1)[0],proviceUrl)self.getCity(cityUrl)# 市def getCity(self,url):print('getCity',url)resp = self.session.get(url)resp.encoding='utf-8'soup = BeautifulSoup(resp.text, 'lxml')trs = soup.select('table.citytable > tr.citytr')for tr in trs:a = tr.select('td > a')if len(a)>0 :cityUrl = a[0].get('href')print('{}-{}-{}'.format(a[0].get_text(), a[1].get_text(), 2))row =[a[0].get_text(),a[1].get_text(),2,'']self.csvWriteRow(row)cityUrl = '{}/{}'.format(url.rsplit('/',1)[0],cityUrl)self.getCounty(cityUrl)else:td=tr.select('td')if len(td)>0 :row =[td[0].get_text(),td[1].get_text(),2,'']self.csvWriteRow(row)# 区def getCounty(self,url):print('getCounty',url)resp = self.session.get(url)resp.encoding='utf-8'soup = BeautifulSoup(resp.text, 'lxml')trs = soup.select('table.countytable > tr.countytr')for tr in trs:a = tr.select('td > a')if len(a)>0 :countryUrl = a[0].get('href')print('{}-{}-{}'.format(a[0].get_text(), a[1].get_text(), 3))row =[a[0].get_text(),a[1].get_text(),3,'']self.csvWriteRow(row)cityUrl = '{}/{}'.format(url.rsplit('/',1)[0],countryUrl)self.getTown(cityUrl)else:td=tr.select('td')if len(td)>0 :row =[td[0].get_text(),td[1].get_text(),3,'']self.csvWriteRow(row)# 县、镇、街道def getTown(self,url):resp = self.session.get(url)resp.encoding='utf-8'soup = BeautifulSoup(resp.text, 'lxml')trs = soup.select('table.towntable > tr.towntr')for tr in trs:a = tr.select('td > a')if len(a)>0 :townUrl = a[0].get('href')print('{}-{}-{}'.format(a[0].get_text(), a[1].get_text(), 4))row =[a[0].get_text(),a[1].get_text(),4,'']self.csvWriteRow(row)cityUrl = '{}/{}'.format(url.rsplit('/',1)[0],townUrl)# 取消村落抓取(太多)# self.getVillage(cityUrl)else:td=tr.select('td')if len(td)>0 :row =[td[0].get_text(),td[1].get_text(),4,'']self.csvWriteRow(row)# 居委会、村落def getVillage(self,url):resp = self.session.get(url)resp.encoding='utf-8'soup = BeautifulSoup(resp.text, 'lxml')trs = soup.select('table.villagetable > tr.villagetr')for tr in trs:a = tr.select('td')print('{}-{}-{}'.format(a[0].get_text(), a[2].get_text(), 5,a[1].get_text()))row =[a[0].get_text(), a[2].get_text(), 5,a[1].get_text()]self.csvWriteRow(row)pet = XingZhengQu()
pet.getProvice()

数据样例

在这里插入图片描述

二、调用现成的接口

调用接可以省去每次数据更新后还需要同步数据,数据齐全,及时更新
接口调用简单

接口优势:

  • 1、可查询全国范围内的省、市、区及县城的详细信息;
  • 2、查询范围广,反馈信息内容丰富
  • 3、专人技术维护,保证服务随时畅通。

免费的API接口: 全国行政区划查询appkey获取

接口调用示例:

import requests
import jsonclass XingZhengQu(object):def __init__(self):self.session = requestsdef apiGet(self):params={'key':'appkey','fid':'320000'}resp = self.session.get('http://apis.juhe.cn/xzqh/query',params)resp_json = json.loads(resp.text)print(resp_json)
pet = XingZhengQu()
pet.apiGet()        

返回数据:

{"reason": "success","result": [{"id": "320100","name": "南京市","fid": "320000","level_id": "2"},{"id": "320200","name": "无锡市","fid": "320000","level_id": "2"},{"id": "320300","name": "徐州市","fid": "320000","level_id": "2"},{"id": "320400","name": "常州市","fid": "320000","level_id": "2"},{"id": "320500","name": "苏州市","fid": "320000","level_id": "2"},{"id": "320600","name": "南通市","fid": "320000","level_id": "2"},{"id": "320700","name": "连云港市","fid": "320000","level_id": "2"},{"id": "320800","name": "淮安市","fid": "320000","level_id": "2"},{"id": "320900","name": "盐城市","fid": "320000","level_id": "2"},{"id": "321000","name": "扬州市","fid": "320000","level_id": "2"},{"id": "321100","name": "镇江市","fid": "320000","level_id": "2"},{"id": "321200","name": "泰州市","fid": "320000","level_id": "2"},{"id": "321300","name": "宿迁市","fid": "320000","level_id": "2"}],"error_code": 0
}

三、数据私有化部署

除了自己抓取、接口调用,还有一种懒人是数据获取,私有化部署,定期下载更新数据源,无需其他处理
具体相见一下链接:
全国行政区划查询私有化部署文档

这篇关于国家行政区数据获取三种方式:爬虫、调用API、私有化部署的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/161531

相关文章

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定