注意:如果想要保存到数据库或者导出Excel,直接在每个print()处进行保存即可。
import re
import urllib.request
INDEX_URL = "http://www.stats.gov/tjsj/tjbz/tjyqhdmhcxhfdm/2021/"
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)
# 获取城市名称 + 省份代码 + 城市代码
for url, name in province_data:
# 拼接省份代码
code = url.replace(".html", "") + "0" * 10
print("省份:%s 代码:%s" % (name, code))
get_city_code(url)
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)
# 获取地区名称 + 地区代码
for url, code, _url, name in city_data:
print("城市:%s 代码:%s" % (name, code))
get_area_code(url)
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)
# 获取街道名称 + 街道代码
for url, code, _url, name in area_data:
print("区县:%s 代码:%s" % (name, code))
get_street_code(url)
def get_street_code(area_url):
"""
获取街道名称+代码
:return:
"""
# 获取街道初始页
street_response = urllib.request.urlopen(INDEX_URL + area_url[3:5] + "/" + area_url).read().decode("utf-8")
# 获取街道名称+街道code+社区初始页数据
street_data = re.findall(r"<tr class=\"towntr\"><td><a href=\"(.*?)\">(.*?)</a></td><td><a href=\"(.*?)\">("
r".*?)</a></td></tr>", street_response)
# 获取社区名称 + 社区代码
for url, code, _url, name in street_data:
print("街道:%s 代码:%s" % (name, code))
get_community_code(url)
def get_community_code(street_url):
"""
获取社区名称+代码
:return:
"""
# 获取社区初始页
community_response = urllib.request.urlopen(INDEX_URL + street_url[3:5] + "/" + street_url[5:7] + "/" + street_url)\
.read().decode("utf-8")
community_data = re.findall(r"<tr class=\"villagetr\"><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>"
, community_response)
for code, _type, name in community_data:
print("社区:%s 代码:%s" % (name, code))
def main():
"""
主启动函数
:return:
"""
# 获取省份名称
get_province_code()
if __name__ == "__main__":
main()
更多推荐
Python爬取行政区划代码(最新版)
发布评论