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

从国家统计局爬取行政区划数据

程序员文章站 2022-05-04 18:08:30
...
import requests
from bs4 import BeautifulSoup

_main_url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/'


def create_parser(url, encoding='gbk'):
    response = requests.get(url)
    response.encoding = encoding
    return BeautifulSoup(response.text, "html.parser")


def get_provinces():
    bs = create_parser(_main_url)
    rows = bs.find_all('tr', 'provincetr')
    for row in rows:
        for link in row.find_all('a'):
            name = link.text
            print(name)
            get_cities(_main_url + link.attrs['href'])


def get_cities(url):
    bs = create_parser(url)
    rows = bs.find_all('tr', 'citytr')
    for row in rows:
        links = row.find_all('a')
        if len(links) >= 2:
            code = links[0].text
            name = links[1].text
            print('\t', name, code)
            get_counties(_main_url + links[1].attrs['href'])


def get_counties(url):
    bs = create_parser(url)
    rows = bs.find_all('tr', 'countytr')
    for row in rows:
        links = row.find_all('a')
        if len(links) >= 2:
            code = links[0].text
            name = links[1].text
            print('\t\t', name, code)


if __name__ == '__main__':
    get_provinces()

 

有几点需要注意:

1、国家统计局每年都会更新行政区划数据,2021年的数据还未公布,可以关注这个页面

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm

2、页面head#meta描述的编码是gb2312,但发现两项异常数据,尝试换用 gbk 解决

鄠邑区 610118000000

埇桥区 341302000000

3、实际使用时,可能摘掉『市辖区』更方便前端使用,某些『市辖区』无链接,编码时需要容错

 

 

 

相关标签: Python python