本文获取的是2023年4月发布的2022年中华人民共和国县以上行政区划代码,随着时间的推移部分区县的行政区划代码可能会存在更新,需要的话上国家民政部官网搜索“行政区划”相关信息,即可获取全国最新的行政区划代码网址。
# 导入库
from bs4 import BeautifulSoup
import requests
# 2022年中华人民共和国县以上行政区划代码
url = 'https://www.mca.gov.cn/mzsj/xzqh/2022/202201xzqh.html'
# 解析网页
r = requests.get(url).content.decode('utf-8')
soup = BeautifulSoup(r, 'html.parser')
# 获取网页中的表格
table = soup.find('table')
# 初始化数据字典
data_dict = {}
# 逐行遍历表格
for row in table.find_all('tr'):
# 找到每一行中的所有单元格
cells = row.find_all('td')
# 确保至少有两个单元格
if len(cells) >= 3:
# 提取第二列[行政区划代码]和第三列[单位名称]元素
second_column = cells[1].text
third_column = cells[2].text
# 保存为字典元素
data_dict[second_column] = third_column.replace('\xa0', '').strip()
# 使用字典推导式删除键为空的元素
data_dict = {k: v for k, v in data_dict.items() if v}
del data_dict['行政区划代码']
# 输出删除键为空元素后的字典
print(data_dict)
上述代码使用的网址可以根据需要及时更新,但更新后的页面可能和当前网址页面结构不一定相同,因此本文旨在说明获取信息的逻辑。
本文在获取网页信息时主要采用的是requests库,解析网页结构使用的是BeautifulSoup库。
在解析网页时,BeautifulSoup获取的输入参数类型通常是string或字节流数据格式,获取到网页信息后,分析网页结构,发现所需要的信息在网页table(表格标签)的tr(行标签)的第二和第三个td(单元格标签),因此直接获取表格第二三列的文本内容即可。
需要注意的是,网页格式可能会生成一些所需信息以外的不需要的字符,因此在获取到数据后,需要检查其中是否包含一些多余字符。
如 '\xa0' 是Unicode编码中的非打印字符,表示不间断空格(non-breaking space)。在解析网页文本时,可以使用Python的字符串处理方法来删除 '\xa0',对于字符串前后的空白字符,可使用strip()函数清除。
对于一些额外的键值对,正常删除即可。通常一次获取省市代码后,短期内不会发生变化,因此可以将获取的内容保存为json文件即可,方便后续调用。
import json
# 写入json文件
with open(r'temp/city_and_code.json', 'w+', encoding='utf-8') as f:
f.write(json.dumps(data_dict, ensure_ascii=False, indent=2)) # 缩进2字符
# 从json文件中加载字典
with open(r'temp/city_and_code.json', "r+", encoding="utf-8") as f:
dict_ = json.load(f)