一、数据获取原因
由于最近项目在搞房价预测,获取下来的数据没有考虑到省份,而且有很多是县级市,而且没有城市代码可以做关联,于是想得到一份比较完整的匹配表
二、数据获取流程
找到强大的网友,修改一下他们的代码(自己比较懒)
原创链接:
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()