获取全国统计用区划代码和城乡划分代码

一、数据获取原因

        由于最近项目在搞房价预测,获取下来的数据没有考虑到省份,而且有很多是县级市,而且没有城市代码可以做关联,于是想得到一份比较完整的匹配表

二、数据获取流程

        找到强大的网友,修改一下他们的代码(自己比较懒)

        原创链接:

Python爬取行政区划代码(最新版)_python省份代码_代码搬运工小付的博客-CSDN博客

        废话不多说,直接上代码:

import re
import urllib.request

import pandas as pd

INDEX_URL = "http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2022/"


def get_province_code():
    """
    获取省份名称
    :return:
    """
    # 获取省级初始页
    province_response = urllib.request.urlopen(INDEX_URL + "index.html").read().decode("utf-8")
    # 获取省份名称+城市初始页数据
    province_data = re.findall(r"<td><a href=\"(.*?)\">(.*?)<br /></a></td>", province_response)
    # 获取城市名称 + 省份代码 + 城市代码
    lst3=[]
    for url, name in province_data:
        # 拼接省份代码
        code = url.replace(".html", "") + "0" * 10
        print("省份:%s 代码:%s" % (name, code))
        res = get_city_code(url)
        for i in range(len(res)):
            lst3.append([name, code, res[i][0], res[i][1], res[i][2], res[i][3]])
    return lst3



def get_city_code(province_url):
    """
    获取城市名称+代码
    :return:
    """
    # 获取城市初始页
    city_response = urllib.request.urlopen(INDEX_URL + province_url).read().decode("utf-8")
    # 获取城市名称+城市code+地区初始页数据
    city_data = re.findall(r"<tr class=\"citytr\"><td><a href=\"(.*?)\">(.*?)</a></td><td><a href=\"(.*?)\">("
                           r".*?)</a></td></tr>", city_response)
    # 获取地区名称 + 地区代码
    lst2 = []
    for url, city_code, _url, city_name in city_data:
        print("城市:%s 代码:%s" % (city_name, city_code))
        res = get_area_code(url)
        for i in range(len(res)):
            lst2.append([city_name, city_code, res[i][0], res[i][1]])
    return lst2




def get_area_code(city_url):
    """
    获取区县名称+代码
    :return:
    """
    # 获取区县初始页
    area_response = urllib.request.urlopen(INDEX_URL + city_url).read().decode("utf-8")
    # 获取区县名称+区县code+街道初始页数据
    area_data = re.findall(r"<tr class=\"countytr\"><td><a href=\"(.*?)\">(.*?)</a></td><td><a href=\"(.*?)\">("
                           r".*?)</a></td></tr>", area_response)
    # 获取街道名称 + 街道代码
    lst1 = []
    for url, district_code, _url, district_name in area_data:
        print("区县:%s 代码:%s" % (district_name, district_code))
        lst1.append([district_name, district_code])
    return lst1




def main():
    """
    主启动函数
    :return:
    """
    # 获取省份名称
    res = get_province_code()
    columns = ['province_name', 'province_code', 'city_name', 'city_code', 'district_name', 'district_code']
    df = pd.DataFrame(res, columns=columns)
    df.to_csv("code.csv", index=False)


if __name__ == "__main__":
    main()

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
从国家统计局抓取的地图省市区划代码和城划分代码(最新2020/06/03),共596071条数据。来源于国家统计局http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2019/。 数据结构: CREATE TABLE `area` ( `areaid` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `area_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `fatherid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `area_type` int(255) DEFAULT NULL COMMENT '区域代码:\r\n100 :城镇,110:城区,111 :主城区,112 :城乡结合区,120 :镇区,121 :镇中心区,122:镇乡结合区,123:特殊区域200 :乡村,210:乡中心区,220:村庄\r\n\r\n', `is_delete` int(255) DEFAULT '0', PRIMARY KEY (`areaid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 部分数据: INSERT INTO `area` VALUES ('110000000000','北京市',NULL,NULL,0); INSERT INTO `area` VALUES ('110100000000','市辖区','110000000000',NULL,0); INSERT INTO `area` VALUES ('110101000000','东城区','110100000000',NULL,0); INSERT INTO `area` VALUES ('110101001000','东华门街道','110101000000',NULL,0); INSERT INTO `area` VALUES ('110101001001','多福巷社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001002','银闸社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001005','东厂社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001006','智德社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001007','南池子社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001008','黄图岗社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001009','灯市口社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001010','正义路社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001011','甘雨社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001013','台基厂社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001014','韶九社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101001015','王府井社区居委会','110101001000',111,0); INSERT INTO `area` VALUES ('110101002000','景山街道','110101000000',NULL,0); INSERT INTO `area` VALUES ('110101002001','隆福寺社区居委会','110101002000',111,0); INSERT INTO `area` VALUES ('110101002002','吉祥社区居

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值