python 识别省市、区县并组建三级信息数据库

news2024/9/21 5:32:53

一、网址:

全国行政区划信息查询平台

二、分析并搭建框架

检查网页源码:

python 识别省市 python区县查询_python 识别省市

检查网页源码可以发现: 所有省级信息全部在javaScript下的json中,会在页面加载时加载json数据,填充到页面的option中。


1、第一步:使用正则表达式抓取json数据并解析,组成一个province集合:
# 获取省的集合
       def get_province(self):
        pattern = re.compile(r"var json =(.*?);", re.MULTILINE | re.DOTALL)
        script = self.soup.find("script", text=pattern)
        lists = str(pattern.search(script.text).group(1))
        json_list = json.loads(lists)
        # province_list = set()
        province_dict = dict()
        for json_data in json_list:
            province = json_data['shengji']
            quhua_code = json_data['quHuaDaiMa']
            province_dict.update({quhua_code: province})
            # province_list.add(province)
            # print(province_dict)
        return province_dict
2、第二步:检查该网站实现级联查询的方式,找出查询市区的方式

python 识别省市 python区县查询_全国最新省市区_02

python 识别省市 python区县查询_ci_03

python 识别省市 python区县查询_全国最新省市区_04

根据这段源码可看出,在选择 省级的后,网页会调用selectJson接口进行一个post请求,上图可以看到请求的body和header等信息。

代码:

# 获取市
    def get_city(self, shengji):
        body = ("shengji=" + shengji).encode('UTF-8')
        # body = "shengji='江苏省(苏)'"..encode('UTF-8')
        headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",
                   'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, "
                                 "like Gecko) Chrome/77.0.3865.120 Safari/537.36"
                   }
        response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)
        content = response.content
        json_list = json.loads(content)
        # city_list = set()
        city_dict = dict()
        for json_data in json_list:
            citys = json_data['diji']
            # city_list.add(citys)
            quhua_code = json_data['quHuaDaiMa']
            city_dict.update({quhua_code: citys})
        return city_dict
        # return city_list

    # 获取区
    def get_area(self, shengji, diji):
        body = ("shengji=" + shengji + "&diji=" + diji).encode('UTF-8')
        headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",
                   'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, "
                                 "like Gecko) Chrome/77.0.3865.120 Safari/537.36"
                   }
        response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)
        content = response.content
        json_list = json.loads(content)
        # area_list = set()
        area_dict = dict()
        for json_data in json_list:
            area = json_data['xianji']
            # area_list.add(area)
            area_code = json_data['quHuaDaiMa']
            area_dict.update({area_code: area})
        return area_dict
3、第三步:main函数(遍历所有省市区+数据入库)

数据库表结构如下:

python 识别省市 python区县查询_python_05

三、全部代码:

import requests
from bs4 import BeautifulSoup
import pymysql
import re
import json


class allAreaDataNew(object):
    base_url = 'http://xzqh.mca.gov.cn/map'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'}
    wb_data = requests.get(base_url, headers=headers)
    wb_data.encoding = 'GBK'
    soup = BeautifulSoup(wb_data.text, 'lxml')

    # print(soup)

    def __init__(self):

        #### 自己数据库信息
        self.db = pymysql.connect("***", "***", "***", "***", charset="utf8mb4")  # mysql数据库
        self.main()
        self.db.close()

    # 入口
    def main(self):
        sql_list = set()
        province_dict = self.get_province()
        for province_code in province_dict:
            province = province_dict[province_code]
            city_dict = self.get_city(province)
            sql_province = "insert into area_config values (null,'" + province + "','PROVINCE'," + province_code + ",0)"
            sql_list.add(sql_province)
            print(
                province_code + "----------------------------------省------------------------------------------" + province + "\n")
            for city_code in city_dict:
                city = city_dict[city_code]
                area_dict = self.get_area(province, city)
                print(city_code + "*******************市****************" + city + "\n")
                # 处理 省直辖县级行政单位
                if city == '省直辖县级行政单位' or city == '自治区直辖县级行政单位':
                    sql_city = "insert into area_config values (null,'" + city + "','CITY'," + province_code + "," + province_code + ")"
                    sql_list.add(sql_city)
                    for area_code in area_dict:
                        area = area_dict[area_code]
                        print(area_code + "-区-" + area + "\n")
                        sql_area = "insert into area_config values (null,'" + area + "','DISTRICT'," + area_code + "," + province_code + ")"
                        sql_list.add(sql_area)
                else:
                    sql_city = "insert into area_config values (null,'" + city + "','CITY'," + city_code + "," + province_code + ")"
                    sql_list.add(sql_city)
                    for area_code in area_dict:
                        area = area_dict[area_code]
                        print(area_code + "-区-" + area + "\n")
                        sql_area = "insert into area_config values (null,'" + area + "','DISTRICT'," + area_code + "," + city_code + ")"
                        sql_list.add(sql_area)
        print(str(sql_list))
        # 事务入库
        empty_sql = "delete from area_config"
        self.connect_mysql(empty_sql, sql_list)

    # 获取省
    def get_province(self):
        pattern = re.compile(r"var json =(.*?);", re.MULTILINE | re.DOTALL)
        script = self.soup.find("script", text=pattern)
        lists = str(pattern.search(script.text).group(1))
        json_list = json.loads(lists)
        # province_list = set()
        province_dict = dict()
        for json_data in json_list:
            province = json_data['shengji']
            quhua_code = json_data['quHuaDaiMa']
            province_dict.update({quhua_code: province})
            # province_list.add(province)
            # print(province_dict)
        return province_dict

    # 获取市
    def get_city(self, shengji):
        body = ("shengji=" + shengji).encode('UTF-8')
        # body = "shengji='江苏省(苏)'"..encode('UTF-8')
        headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",
                   'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, "
                                 "like Gecko) Chrome/77.0.3865.120 Safari/537.36"
                   }
        response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)
        content = response.content
        json_list = json.loads(content)
        # city_list = set()
        city_dict = dict()
        for json_data in json_list:
            citys = json_data['diji']
            # city_list.add(citys)
            quhua_code = json_data['quHuaDaiMa']
            city_dict.update({quhua_code: citys})
        return city_dict
        # return city_list

    # 获取区
    def get_area(self, shengji, diji):
        body = ("shengji=" + shengji + "&diji=" + diji).encode('UTF-8')
        headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",
                   'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, "
                                 "like Gecko) Chrome/77.0.3865.120 Safari/537.36"
                   }
        response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)
        content = response.content
        json_list = json.loads(content)
        # area_list = set()
        area_dict = dict()
        for json_data in json_list:
            area = json_data['xianji']
            # area_list.add(area)
            area_code = json_data['quHuaDaiMa']
            area_dict.update({area_code: area})
        return area_dict
        # return area_list

    def connect_mysql(self, empty_sql, sql_list):
        cursor = self.db.cursor()
        try:
            cursor.execute(empty_sql)
            for sql in sql_list:
                cursor.execute(sql)
            print('=================================更新所有数据完成!=================================')
        except Exception as e:
            print('=================================更新失败!=================================')
            print(e)
            self.db.rollback()
        finally:
            cursor.close()
            # 提交操作
            self.db.commit()


if __name__ == '__main__':
    allAreaDataNew()

代码执行成功后就可以查到中国所有省市区啦!:

python 识别省市 python区县查询_python_06

特殊情况:“省直辖县级行政单位”和“自治区直辖县级行政单位”

python 识别省市 python区县查询_ci_07

注意:部分省有特殊的“直辖县级行政单位”或“自治区直辖县级行政单位”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数

要求 请编写函数fun,其功能是:找出用1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数,然后把这些三位数按从小到大的顺序依次存入相应的数组xxx中,符合条件的个数由函数值返回 解题思路 本题要求求出一个三位数&…

c++基础入门三

文章目录 C基础入门(三)auto关键字auto简介使用细则一、可以和指针联合使用二、在一行定义多个变量 不能使用场景一、不能作为函数的参数二、不能用来声明数组 基于for的循环使用条件 指针空值nullptr C基础入门(三) 回顾上集,我们介绍了C的函数重载,引…

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ:Zynq-7000 All Programmable SoC(APSoC),赛灵思公司(AMD Xilinx)推出的新一代全可编程片上系统 PS:Processing System,处理系统 PL:Program Logic&…

C++ 类的默认成员函数- 拷贝构造函数

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称…

十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明

十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明 文章目录 十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明1. 基本介绍2. 准备工作:3. 内置 Tomcat 的配置3.1 第…

C++速通LeetCode中等第3题-盛最多水的容器

双指针法:两个指针分别指向左右边界,记录最大面积,由于面积由短板决定,两个指针中较短的短指针向内移动一格,再次记录最大面积, 直到两指针相遇,得出答案。 class Solution { public:int maxAr…

其他图嵌入方法(6)

前面写了图神经网络可以把节点或图映射到一个低维空间,我们将其称为图嵌入。然而,除了图神经网络还有许多的图嵌入方法。本节将介绍其他浅层图嵌入方法。早在图神经网络发明之前,图嵌入的概念就经常出现在流形学习和网络分析的研究中。相对于…

科技引领未来生活——“光影漫游者”展览馆应用—轻空间

随着科技的快速发展,展览馆作为展示文化、科技和艺术的场所,正逐渐从传统的静态展示向高科技互动体验转变。由轻空间打造的“光影漫游者”展览馆,凭借其前沿的气承式结构和智能化系统,将参观者带入了一个未来感十足、充满科技魅力…

海外服务器哪个速度最快且性能稳定

海外服务器的速度与性能稳定性受多种因素影响,包括地理位置、网络架构、基础设施质量以及用户网络路径等。在众多选择中,几个特定地区的服务器因其卓越表现而备受推崇。 首先,美国硅谷(加利福尼亚州)与纽约的服务器以其技术领先、网络连接稳定…

OceanBase 中 schema 的定义与应用

背景 经常在OceanBase 的问答社区 里看到一些关于 “schema 是什么” 的提问。 先纠正一些同学的误解, OceanBase 中的 Schema 并不简单的等同于 Database,本次分享将探讨 OceanBase 中的Schema是什么,及一些大家经常遇到的问题。 具体而…

2023 hnust 湖科大 毕业实习 报告+实习鉴定表

2023 hnust 湖科大 毕业实习 报告实习鉴定表 岗位 IT公司机房运维 实习报告 实习鉴定表 常见疑问 hnust 湖科大 毕业实习常见问题30问(2021 年7月,V0.9)-CSDN博客时间:大四开学第三四周毕业实习23年是企业(黑马&am…

【H2O2|全栈】关于CSS(6)CSS基础(五)

目录 CSS基础知识 前言 准备工作 网页项目规范 创建项目 布局 补充一部分属性 outline border-radius 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 本期博客主要分享的是网页项目规范,ou…

算法训练——day16快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为…

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…

【无标题】Java_Se 数据变量与运算符

标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。这些是编程中的“砖块”,是编程的基础。要想开始正式编程,还需要再学“控制语句”,控制语句就像“水泥”,可以把“砖块”粘到一起,最终形成“一座大…

react学习笔记一:react介绍

将view规划成一个个的组件,是一个响应式的声明式的设计。 虚拟dom,减少dom操作。vue的虚拟dom是在react的基础上拓展来的。 单向数据流:是一种数据流动的模式。数据流的方向是有上到下的,在react中主要是从父组件流向子组件。 …

Django后台管理复杂模型

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 《Django 5企业级Web应用开发实战(视频教学版)》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) Django框架…

C#学习(四)C#连接Mysql实现增删改查

博主刚开始接触C#,本系列为学习记录,如有错误欢迎各位大佬指正!期待互相交流! 文章目录 一、安装Mysql1.1 启用Mysql1.2 登录Mysql 二、安装Navicat2.1 建立连接2.2 新建数据库2.3 新建表 三、创建Winform实现增、删、改、查3.1 下…

医学数据分析实训 项目七 集成学习--空气质量指标--天气质量分析和预测

项目七:集成学习 实践目的 理解集成学习算法原理;熟悉并掌握常用集成学习算法的使用方法;熟悉模型性能评估的方法;掌握模型优化的方法。 实践平台 操作系统:Windows7及以上Python版本:3.8.x及以上集成开…

ubuntu安装wordpress(基于LNMP环境)

参考链接 Ubuntu安装LNMP 安装步骤 环境需要LNMP环境,如果没有安装可以参考ZATA—LNMP简单安装 在mysql中设置wordpress所用的用户名和密码 #1. 登录mysql mysql -uroot -p #2. 创建wordpress数据库 create database wordpress; #3. 创建新用户user,…