python 自动化采集全国行政区划代码
完整代码:
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 自动化采集全国行政区划代码相关推荐
- 2021年全国行政区划代码
2021年的,阿里云盘下载 2021年全国行政区划代码_整理版.xlsx https://www.aliyundrive.com/s/BZAAL9NuRfS
- 全国行政区划代码具体到县
自己在网上找资料整理出来比较全的全国行政区划代码,可以通过读取身份证前6位获取客户的籍贯信息
- python随机生成车牌_使用Python自动化获取全国每个城市的车牌代码
最近有这样一需求,需要获取12123交管查询网站上的全国每个城市对应的城市id和车牌代码.最初的想法是直接用Python写个爬虫,遍历每个城市,然后用Xpath提取DOM节点数据就好了.然而在实际操作 ...
- python自动化写作_50行代码让python自动生成文章
不知道从小到大,我们被迫写了多少心得体会,多少人生感想,如果真情实地的去感受写作然后成长当然很好,但是更多的都是形式主义的需求,并没有人去看里面的内容,白白浪费我们多少大好时光,有时候我们ctrl,C ...
- 全国行政区划代码(json对象)---只包含城市代号和城市名称的json对象代码(包括县级市)
最简单的只包含城市代号和城市名称的json对象代码(包括县级市): var area = {"110000":"北京市","110100": ...
- python自动化通知webhook接口代码参考
以下代码仅定义文本类型的数据 import requests import json class DingTalk_Base:def __init__(self):self.__headers = { ...
- 全国行政区划代码(json对象)---包含键值对的城市代号和城市名称的json对象代码(包括县级市)
export default [ { 'cityCode': '110000', 'cityName': '北京市' }, { 'cityCode': '110100', 'cityName': '北 ...
- 全国行政区划代码(json对象版)
1 var area = {"110000":"北京市","110100":"北京市","110101&quo ...
- 全国行政区划代码PHP版数据
<?php$data = array('110000' => array('name' => '北京市',),'120000' => array('name' => '天 ...
最新文章
- 欧氏空间内积定义_线性代数 (8) -- 欧式空间 (让生活大不同)
- 人工神经外网络中为什么ReLu要好过于Tanh和Sigmoid Function?
- db2不记录日志插入记录
- admininfo.php,admin.php 源代码在线查看 - FTB安装版 v1.3(虚拟形象)FTB安装版 v1.3(虚拟形象) 资源下载 虫虫电子下载站...
- [机器学习]信息熵信息增益
- OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))
- 获取指定长度的随机字符串
- HDU 4893 线段树
- 未找到导入的项目,请确认 Import 声明中的路径正确
- np.random.choice用法
- 要是不会用数据,算什么IT产品经理?
- linux使用指导-debian/archlinux/LFS
- 0x0F转换成二进制
- input 数字类型
- mysql的默认隔离等级_mysql 四种隔离级别
- 【任务二】打卡——by 003-Vamein
- 用Vue制作图片翻面效果
- mvn install BUILD FAILURE : Downloading from central: https://repo.maven.apache.org/maven2/org/sp...
- MY云顶之奕上分阵容
- Java练手项目1:基于RFID的图书仓储管理系统(可做毕设)
热门文章
- 大数据术语英文翻译及详解
- 昆仑分布式数据库Sequence功能及其实现机制
- Le Potato + Jumbospot MMDVM热点盒子
- matlab 坐标系转换
- mysql(完整版)
- 第07章 循环神经网络
- 信息技术学业水平考试上机考试 18题 EXCEL操作题(25分)
- Python Seaborn (5) 分类数据的绘制
- 2021恩施高考成绩查询,2021恩施中考成绩查询 2021恩施中考成绩查询时间及入口...
- Fastboot线刷“复活”之刷机心得(二)——线刷刷机