国家行政区数据获取三种方式:爬虫、调用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

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.