爬虫练习3:提取全国省市县信息并统计

爬取思路:

1、获取网页信息(参照民政部最新的公开数据:http://www.mca.gov.cn/article/sj/xzqh/1980/)

2、根据标签提取省市县信息

3、将提取的数据打印并输出到文件

点击查看代码
# -*- coding: utf-8 -*-
import urllib.request
from bs4 import BeautifulSoup
from lxml import html
import re

# python3发送请求,获取页面数据
page = urllib.request.urlopen('http://www.mca.gov.cn/article/sj/xzqh/2020/20201201.html')

# 读取页面数据并用lxml解析器来解析
soup = BeautifulSoup(page.read().decode('utf-8'), 'lxml')

# 省市县数量统计
provice = 0
city = 0
county = 0

# 打开文件
f = open('xzqh2020.txt','w',encoding = 'utf-8')

# 提取所有tr标签下的第2、3个td的数据
# 第1行为标题,第2行为空,第3行为分类,倒数9行为无效数据,需剔除。其他均为数据行

for i in range(len(soup.find_all('tr'))-9):
    if i == 0:
        print (soup.find_all('tr')[i].find('td').text +'\n')
        f.write (soup.find_all('tr')[i].find('td').text +'\n')
    elif i == 1:
        pass
    elif i == 2:
        code = soup.find_all('tr')[i].find_all('td')[1].text
        name = soup.find_all('tr')[i].find_all('td')[2].text
        print (code+'\t'+name+'\t省级行政区数\t'+'地级行政区数\t'+'县级行政区数'+'\n')
        f.write (code+'\t'+name+'\t省级行政区数\t'+'地级行政区数\t'+'县级行政区数'+'\n')

    else:
        code = soup.find_all('tr')[i].find_all('td')[1].text
        name = soup.find_all('tr')[i].find_all('td')[2].text

        # 对数据做分类,0000结尾为省,00结尾为市,其余为县

        if re.match('[0-9][0-9]+0000',code):
            provice = provice + 1
        elif re.match('[0-9][0-9][0-9][1-9]+00',code):
            city = city + 1
        else:
            county = county + 1
        print (code+'\t'+name+'\t'+str(provice)+'\t'+str(city)+'\t'+str(county))
        f.write (code+'\t'+name+'\t'+str(provice)+'\t'+str(city)+'\t'+str(county)+'\n')
  
f.write ('省级、地级、县级行政区总数分别为:'+ str(provice) + '\t'+ str(city) + '\t' + str(county))
f.close()  
print ('省级、地级、县级行政区总数分别为:'+ str(provice) + '\t'+ str(city) + '\t' + str(county)+'\n'+'数据已下载完成')
输出结果:
点击查看代码
2020年12月中华人民共和国县以上行政区划代码

行政区划代码	  单位名称	省级行政区数	地级行政区数	县级行政区数

110000	北京市	1	0	0
110101	   东城区	1	0	1
110102	   西城区	1	0	2
110105	   朝阳区	1	0	3
110106	   丰台区	1	0	4
110107	   石景山区	1	0	5
110108	   海淀区	1	0	6
110109	   门头沟区	1	0	7
110111	   房山区	1	0	8
110112	   通州区	1	0	9
110113	   顺义区	1	0	10
110114	   昌平区	1	0	11
110115	   大兴区	1	0	12
110116	   怀柔区	1	0	13
110117	   平谷区	1	0	14
110118	   密云区	1	0	15
110119	   延庆区	1	0	16
120000	天津市	2	0	16
120101	   和平区	2	0	17
120102	   河东区	2	0	18
120103	   河西区	2	0	19
120104	   南开区	2	0	20
120105	   河北区	2	0	21
................
......中间部分省略......
................
654200	 塔城地区	31	311	2841
654201	   塔城市	31	311	2842
654202	   乌苏市	31	311	2843
654221	   额敏县	31	311	2844
654223	   沙湾县	31	311	2845
654224	   托里县	31	311	2846
654225	   裕民县	31	311	2847
654226	   和布克赛尔蒙古自治县	31	311	2848
654300	 阿勒泰地区	31	312	2848
654301	   阿勒泰市	31	312	2849
654321	   布尔津县	31	312	2850
654322	   富蕴县	31	312	2851
654323	   福海县	31	312	2852
654324	   哈巴河县	31	312	2853
654325	   青河县	31	312	2854
654326	   吉木乃县	31	312	2855
659001	   石河子市	31	312	2856
659002	   阿拉尔市	31	312	2857
659003	   图木舒克市	31	312	2858
659004	   五家渠市	31	312	2859
659005	   北屯市	31	312	2860
659006	   铁门关市	31	312	2861
659007	   双河市	31	312	2862
659008	   可克达拉市	31	312	2863
659009	   昆玉市	31	312	2864
659010	   胡杨河市	31	312	2865
710000	台湾省	32	312	2865
810000	香港特别行政区	33	312	2865
820000	澳门特别行政区	34	312	2865
省级、地级、县级行政区总数分别为:34	312	2865
数据已下载完成
>>> 

posted @ 2021-10-07 15:45  YJXZ  阅读(355)  评论(0编辑  收藏  举报