首页 > Python资料 博客日记
爬取行政区划代码
2024-02-27 19:00:02Python资料围观262次
文章爬取行政区划代码分享给大家,欢迎收藏Python资料网,专注分享技术知识
爬取国家统计局统计用区划代码和城乡划分代码 2023 版
python 实现
一、打开国家统计局官网
https://www.stats.gov.cn/sj/tjbz/qhdm/
二、分析每一级URL找到规律
省级:https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html
地市级:https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/61.html 61为陕西编码
区县级:https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/61/6101.html
找到规律 当前路径+href 路径即可跳入下一级
打码
import json
import time
import requests
from bs4 import BeautifulSoup
main_url = "https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023"
class area_code:
name = ""
code = ""
url = ""
child = []
urban_rural_type = 0
lng = 0
lat = 0
def __init__(self, name, code, url, child, urban_rural_type=0):
self.name = name
self.code = code
self.url = url
self.child = child
self.urban_rural_type = urban_rural_type
self.lng = 0
self.lat = 0
# 爬取全国统计用区划代码和城乡划分代码
# pip install beautifulsoup4
def get_code(suffix_url="index.html"):
_province_url = "{}/{}".format(main_url, suffix_url)
response = requests.get(_province_url)
response.encoding = "utf-8"
_html = response.text
_soup = BeautifulSoup(_html, "html.parser")
_province_code = {}
for a in _soup.find_all("a"):
if a.get("href") and a.get("href").endswith(".html"):
_province_code[a.text] = a.get("href")
return _province_code
def get_child_code(_url, _parent_url=None, _retry=3):
"""
输出 [{name:"呼和浩特市", code:"150100000000", url:"15/1501.html"},{name:"包头市", code:"150200000000", url:"15/1502.html"}]
:param _parent_url: 父级url
:param _retry: 重试次数
:param _url: 当前url
:return:
"""
_city_code = []
if _parent_url is not None and len(_parent_url) > 0:
# 截取最后一个"/"之前的字符串
_parent_path = _parent_url.rsplit("/", 1)[0]
_req_url = "{}/{}".format(_parent_path, _url)
else:
_req_url = "{}/{}".format(main_url, _url)
try:
response = requests.get(_req_url)
except Exception as e:
if _retry > 0:
time.sleep(1)
print("请求出错:{},第{}次重试".format(e, 4 - _retry))
return get_child_code(_url, _parent_url, _retry - 1)
else:
raise e
response.encoding = "utf-8"
_html = response.text
_soup = BeautifulSoup(_html, "html.parser")
# class_="citytr" or class_="towntr" or class_="countytr" or class_="villagetr"
for tr in _soup.find_all("tr", class_=["citytr", "towntr", "countytr"]):
_tds = tr.find_all("td")
print("开始处理 - {}".format(_tds[1].text))
_child_url = ""
if _tds[0].find("a") is not None and _tds[0].find("a").get("href") is not None:
_child_url = _tds[0].find("a").get("href")
if _child_url.endswith(".html"):
_child = get_child_code(_child_url, _req_url)
_city_code.append(area_code(_tds[1].text, _tds[0].text, _child_url, _child))
else:
_city_code.append(area_code(_tds[1].text, _tds[0].text, _child_url, []))
for tr in _soup.find_all("tr", class_=["villagetr"]):
_tds = tr.find_all("td")
code = _tds[0].text
urban_rural_type = _tds[1].text
name = _tds[2].text
_city_code.append(area_code(name, code, "", [], urban_rural_type))
return _city_code
def get_province_list():
"""
# 获取省份、直辖市、自治区代码
:return:
"""
province_map = get_code()
_province_list = []
for _name, _url in province_map.items():
_province_list.append(area_code(_name, _url.split(".")[0], _url, []))
return _province_list
if __name__ == '__main__':
province_list = get_province_list()
# 获取市级代码
for province in province_list:
print("开始处理 - {}".format(province.name))
city_code = get_child_code(province.url)
province.child = city_code
# 输出到文件json
with open("area_code.json", "w", encoding="utf-8") as f:
f.write(json.dumps(province_list, default=lambda obj: obj.__dict__, ensure_ascii=False))
缺陷
- json格式太大了,建议直接入库或者生成cvs
- 不支持退出续爬,后续完善....
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 光流法结合深度学习神经网络的原理及应用(完整代码都有Python opencv)
- Python 图像处理进阶:特征提取与图像分类
- 大数据可视化分析-基于python的电影数据分析及可视化系统_9532dr50
- 【Python】入门(运算、输出、数据类型)
- 【Python】第一弹---解锁编程新世界:深入理解计算机基础与Python入门指南
- 华为OD机试E卷 --第k个排列 --24年OD统一考试(Java & JS & Python & C & C++)
- Python已安装包在import时报错未找到的解决方法
- 【Python】自动化神器PyAutoGUI —告别手动操作,一键模拟鼠标键盘,玩转微信及各种软件自动化
- Pycharm连接SQL Sever(详细教程)
- Python编程练习题及解析(49题)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程