欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python爬取国家统计局行政区划信息

程序员文章站 2022-05-04 18:17:55
...

1. 简介:

2020年统计用区划代码和城乡划分代码,将其中的行政区划爬取并保存成树状结构,以支持类似如下查询:

dic['北京市']['市辖区'].keys()
dict_keys(['东城区', '西城区', '朝阳区', '丰台区', '石景山区', '海淀区', '门头沟区', '房山区', '通州区', '顺义区', '昌平区', '大兴区', '怀柔区', '平谷区', '密云区', '延庆区'])

dic['浙江省'].keys()
dict_keys(['杭州市', '宁波市', '温州市', '嘉兴市', '湖州市', '绍兴市', '金华市', '衢州市', '舟山市', '台州市', '丽水市'])

dic.keys()
dict_keys(['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '上海市', '江苏省', '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区', '海南省', '重庆市', '四川省', '贵州省', '云南省', '*自治区', '陕西省', '甘肃省', '青海省', '宁夏回族自治区', '**自治区'])

2. 代码:

import requests
from bs4 import BeautifulSoup


def dfs(url):
    # 精确到区级行政单位
    if url.count('/') < 9:
        response = requests.get(url)
        # 解决中文乱码
        html_doc = response.content.decode('gbk')
        soup = BeautifulSoup(html_doc)
        dic = {}
        for item in soup.find_all('a'):
            # 过滤多余的超链接
            if not any(ch.isdigit() for ch in item.text):
                dic[item.text] = dfs(url[ : url.rfind('/') + 1] + item.get('href'))
        return dic
    
dic = dfs('http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html')
相关标签: Python