完整代码:

import re
import urllib.request
import pandas as pd
import warnings
warnings.filterwarnings("ignore")
import time
from lxml import etreet ,urls ,names = [],[],[]
INDEX_URL = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2022/" #初始url
res = {'代码':[],'区域':[]}
res =  pd.DataFrame(res)headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
#获取省份页面
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, name1 in province_data:# 获取省份名称 与 代码code1 = url.replace(".html", "") + "0" * 10if url not in urls:urls.append(url)names.append(name1)res = res.append({'代码':code1,'区域':name1},ignore_index = True)def get_province_code(i):#爬取每个省份的城市if urls ==[]:if i >0:print('执行开始')global resget_city_code(urls[i],names[i])return resdef get_city_code(province_url,names):# 获取城市初始页print(INDEX_URL + province_url)print('爬取省份-----------------{}'.format(names))global restry:city_response = urllib.request.urlopen(INDEX_URL + province_url).read().decode("utf-8")except Exception as a:city_response = urllib.request.urlopen(INDEX_URL + province_url).read().decode("utf-8")print(a)# 获取地区名称 + 地区代码city_data = etree.HTML(city_response)for i in city_data.xpath('//tr[@class="citytr"]'):code2 = i.xpath('td[1]//text()')[0]name2 = i.xpath('td[2]//text()')[0]res = res.append({'代码':code2,'区域':name2},ignore_index = True)try:url  = i.xpath('td[1]/a/@href')[0]get_area_code(url)except:print('异常城市:',name2)def get_area_code(city_url):# 获取区县
#     print('请求城市',INDEX_URL + city_url)global restry:area_response = urllib.request.urlopen(INDEX_URL + city_url).read().decode("utf-8")
#         print('请求成功')except Exception as a:       area_response = urllib.request.urlopen(INDEX_URL + city_url).read().decode("utf-8")  #错误后重新调用方法# 获取街道名称 + 街道代码area_data = etree.HTML(area_response)if len(area_data)==0:print("---------------------区县异常------------------------------",name2,city_url)for i in area_data.xpath('//tr[@class="countytr"]'):code3 = i.xpath('td[1]//text()')[0]name3 = i.xpath('td[2]//text()')[0]res = res.append({'代码':code3,'区域':name3},ignore_index = True)try:url  = i.xpath('td[1]/a/@href')[0]get_street_code(url)except:continuedef get_street_code(area_url):global res# 获取街道初始页try:street_response = urllib.request.urlopen(INDEX_URL + area_url[3:5] + "/" + area_url).read().decode("utf-8")except Exception as a: street_response = urllib.request.urlopen(INDEX_URL + area_url[3:5] + "/" + area_url).read().decode("utf-8")print(a)#     print(street_data)street_data = etree.HTML(street_response)if len(street_data)==0:print("---------------------------------------------------",name3,area_url)# 获取街道名称 + 街道代码for i in street_data.xpath('//tr[@class="towntr"]'):code4 = i.xpath('td[1]//text()')[0]name4 = i.xpath('td[2]//text()')[0]res = res.append({'代码':code4,'区域':name4},ignore_index = True)#后面的代码未:获取乡镇级别的行政代码,乡镇数量较多,爬取时间较长#         url  = i.xpath('td[1]/a/@href')[0]
#         get_community_code(url)# def get_community_code(street_url):
#     """
#     获取社区名称+代码
#     :return:
#     """
#     # 获取社区初始页
#     try:
#         community_response = urllib.request.urlopen(INDEX_URL + street_url[3:5] + "/" + street_url[5:7] + "/" + street_url)\
#             .read().decode("utf-8")
#     except:
#         community_response = urllib.request.urlopen(INDEX_URL + street_url[3:5] + "/" + street_url[5:7] + "/" + street_url)\.read().decode("utf-8")
#     community_data = etree.HTML(community_response)
#     for i in community_data.xpath('//tr[@class="villagetr"]'):
#         code5 = i.xpath('td[1]//text()')[0]
#         name5 = i.xpath('td[3]//text()')[0]
#         res = res.append({'代码':code5,'区域':name5},ignore_index = True)from concurrent.futures import ThreadPoolExecutor, as_completed
from concurrent import futures
import concurrentthread_pool = ThreadPoolExecutor(max_workers=2) #线程不能太多,会被反爬for i in range(0,31):     # 循环向线程池中提交任务futures = thread_pool.submit(get_province_code, i)t.append(futures)res1 = []for future in as_completed(t):  # 每完成一个线程响应一个结果,直到work_list中线程全部结束res1.append(future.result())

响应结果(31个省份):

数据:

df = res1[-1]
df = df.sort_values(by='代码')
df = df[~(df['代码'].str.contains(r'\s+',regex=True))]
df

一个4万多条数据

保存为excel文件:

df.to_excel(paht,index=False) #paht为保存地址

excel查看

完整代码:https://download.csdn.net/download/qq_20163065/87433457

(本文仅供学习)

python 自动化采集全国行政区划代码相关推荐

  1. 2021年全国行政区划代码

    2021年的,阿里云盘下载 2021年全国行政区划代码_整理版.xlsx https://www.aliyundrive.com/s/BZAAL9NuRfS

  2. 全国行政区划代码具体到县

    自己在网上找资料整理出来比较全的全国行政区划代码,可以通过读取身份证前6位获取客户的籍贯信息

  3. python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码

    最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码.最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了.然而在实际操作 ...

  4. python自动化写作_50行代码让python自动生成文章

    不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...

  5. 全国行政区划代码(json对象)---只包含城市代号和城市名称的json对象代码(包括县级市)

    最简单的只包含城市代号和城市名称的json对象代码(包括县级市): var area = {"110000":"北京市","110100": ...

  6. python自动化通知webhook接口代码参考

    以下代码仅定义文本类型的数据 import requests import json class DingTalk_Base:def __init__(self):self.__headers = { ...

  7. 全国行政区划代码(json对象)---包含键值对的城市代号和城市名称的json对象代码(包括县级市)

    export default [ { 'cityCode': '110000', 'cityName': '北京市' }, { 'cityCode': '110100', 'cityName': '北 ...

  8. 全国行政区划代码(json对象版)

    1 var area = {"110000":"北京市","110100":"北京市","110101&quo ...

  9. 全国行政区划代码PHP版数据

    <?php$data = array('110000' => array('name' => '北京市',),'120000' => array('name' => '天 ...

最新文章

  1. 欧氏空间内积定义_线性代数 (8) -- 欧式空间 (让生活大不同)
  2. 人工神经外网络中为什么ReLu要好过于Tanh和Sigmoid Function?
  3. db2不记录日志插入记录
  4. admininfo.php,admin.php 源代码在线查看 - FTB安装版 v1.3(虚拟形象)FTB安装版 v1.3(虚拟形象) 资源下载 虫虫电子下载站...
  5. [机器学习]信息熵信息增益
  6. OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
  7. 获取指定长度的随机字符串
  8. HDU 4893 线段树
  9. 未找到导入的项目,请确认 Import 声明中的路径正确
  10. np.random.choice用法
  11. 要是不会用数据,算什么IT产品经理?
  12. linux使用指导-debian/archlinux/LFS
  13. 0x0F转换成二进制
  14. input 数字类型
  15. mysql的默认隔离等级_mysql 四种隔离级别
  16. 【任务二】打卡——by 003-Vamein
  17. 用Vue制作图片翻面效果
  18. mvn install BUILD FAILURE : Downloading from central: https://repo.maven.apache.org/maven2/org/sp...
  19. MY云顶之奕上分阵容
  20. Java练手项目1:基于RFID的图书仓储管理系统(可做毕设)

热门文章

  1. 大数据术语英文翻译及详解
  2. 昆仑分布式数据库Sequence功能及其实现机制
  3. Le Potato + Jumbospot MMDVM热点盒子
  4. matlab 坐标系转换
  5. mysql(完整版)
  6. 第07章 循环神经网络
  7. 信息技术学业水平考试上机考试 18题 EXCEL操作题(25分)
  8. Python Seaborn (5) 分类数据的绘制
  9. 2021恩施高考成绩查询,2021恩施中考成绩查询 2021恩施中考成绩查询时间及入口...
  10. Fastboot线刷“复活”之刷机心得(二)——线刷刷机