Python获取省市县行政区划代码

由于人工填写的省市县数据存在格式不规范、数据不准确等原因,因此数据库常常保存的省市县数据都是以行政区划代码形式保存的,但是读取对应数据的时候我们又希望获取其对应的地区名,因此从官方网站获取行政区划和相应地址字典就很有必要。

本文爬取了中华人民共和国民政部的行政区划数据,如果最新数据有更新,更新对应代码片段即可。

  1. 导入基本库

import requests
from lxml import etree
  1. 解析网页

# 此处为2020年12月中华人民共和国县以上行政区划代码,可对应更改为最新地址
url = 'https://www.mca.gov.cn/article/sj/xzqh/2020/20201201.html'
r = requests.get(url).text
html = etree.HTML(r)
  1. 获取行政区划代码

c = html.xpath('//*[@id="2020年12月份县以上行政区划代码_28320"]/table/tr/td[2]//text()')
len(c)
  1. 获取单位名称

d = html.xpath('//*[@id="2020年12月份县以上行政区划代码_28320"]/table/tr/td[3]/text()')
len(d)
  1. 检查行政区划代码和单位名称,发现len(c)=3210,len(d)=3212,二者长度不一致

检查原网页,发现三沙市的两个区缺失行政区划代码但出现在单位名称中,因此将这两个数据从中删除

Python获取省市县行政区划代码_第1张图片

d.remove('西沙区')
d.remove('南沙区')
len(d)
  1. 将两列数据匹配为字典

# 匹配时舍去了第一行(标题行)
city_code = dict(zip(c[1:], d[1:]))
  1. 将字典保存为json文件,便于后续使用

import json
with open(r'city_and_code.json', 'w+', encoding='GBK') as f:
    f.write(json.dumps(city_code, ensure_ascii=False, indent=2))  # 缩进2字符
  1. 实际使用时直接从json文件中获取该字典

with open(r'city_and_code.json', "r", encoding="GBK") as f:
    dict_ = json.load(f)
print(dict_)

你可能感兴趣的:(python)