Python 爬取国家统计局城市信息2019
写个页面需要有省市区三级联动,缺少最新的城市信息,从网上找了些资源,发现写的各有特色,有的资源里面的语法奇葩到无语,灼瞎我的眼呀,无奈自己就简写了一个脚本,发现统计局的规律还是挺奇特的,开始用xpath爬取,遇到了反爬,还需要特殊处理,就又写了一个正则匹配的脚本;
为了方便使用,我把城市信息获取到了第四级街道(第四级没有进行完整的测试,简单测试了下可以到数据),我的数据到第三级就完成了,数据保存尽量写到文件中或数据库中,在这就不进行处理了,我相信大家都会;
简单写了一个脚本,可以作为参考,脚本如下:
# -*- coding: utf-8 -*-
import re
import requests
import time
import operator
from fake_useragent import UserAgentdef check(func):def check_data(*args,**kwargs):request_data = func(*args,**kwargs)num = 0while not request_data and num < 3:request_data = func(*args,**kwargs)if request_data :breaknum += 1return request_datareturn check_data@check
def request(param,tim):'''下载页面'''time.sleep(tim)try:url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2019/' + param# 伪装ua = UserAgent()headers = {'User-Agent':ua.random}res = requests.get(url,headers=headers)res.raise_for_status()#字符集编码res.encoding = res.apparent_encodingreturn res.textexcept :print('报错')time.sleep(3)return ''def main():############# 省 #############province_param = 'index.html'p_data = request(province_param,1)p_pattern = re.compile(r"<a href='([\s\S]*?)'>([\s\S]*?)<")r_province_list = re.findall(p_pattern, p_data)for province in r_province_list:province_id = province[0].split('.')[0]province_name = province[1]print(province_id,province_name)############# 市 ############city_param = province[0]c_data = request(city_param,1)c_pattern = re.compile(r"<a[\s\S]*?>([\s\S]*?)</a></td><td>[\s\S]*?>([\s\S]*?)<")r_city_list = re.findall(c_pattern,c_data)for city in r_city_list:city_id = city[0]if city[1] == '市辖区':city_name = province_nameelse:city_name = city[1]print(city_id,city_name)############ 区 ############# 获取区链接dirstrict_src = re.compile(r"<a href='([\s\S]*?)'>")dirstrict_param = re.search(dirstrict_src,c_data).groups()[0]#获取区数据d_data = request(dirstrict_param,2)d_pattern = re.compile(r"<a[\s\S]*?>([\s\S]*?)</a></td><td>[\s\S]*?>([\s\S]*?)<")r_dirstrict_list = re.findall(d_pattern,d_data)for dirstrict in r_dirstrict_list:dirstrict_id = dirstrict[0]dirstrict_name = dirstrict[1]print(dirstrict_id,dirstrict_name)#################### 街道 ################### 获取街道链接street_src = re.compile(r"<a href='([\s\S]*?)'>")street_param = re.search(street_src,d_data).groups()[0]#获取街道数据s_data = request(province_id + '/' + street_param,2)s_pattern = re.compile(r"<a[\s\S]*?>([\s\S]*?)</a></td><td>[\s\S]*?>([\s\S]*?)<")r_street_list = re.findall(s_pattern,s_data)for street in r_street_list:street_id = street[0]street_name = street[1]print(street_id,street_name)
main()
Python 爬取国家统计局城市信息2019相关推荐
- Python爬取国家统计局行政区划信息
1. 简介: 2020年统计用区划代码和城乡划分代码,将其中的行政区划爬取并保存成树状结构,以支持类似如下查询: dic['北京市']['市辖区'].keys() dict_keys(['东城区', ...
- Python3爬取国家统计局官网2019年全国所有城市(2020年更新)
Python3爬取国家统计局官网2019年全国所有城市(2020年更新) 一级城市爬取 一级城市爬取 由于最近需要用到所有城市的数据,故从统计局爬取19年的一级城市数据 import random i ...
- Python爬取国家统计局官网最新全国所有城市县镇数据
最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...
- python爬取12306列车信息自动抢票并自动识别验证码(一)列车数据获取篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master].注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一 ...
- python爬取自如房间信息(一)
使用python和selenium+Chrome Headless爬取自如房间信息,并将结果存储在MongoDB中.其中最麻烦的应该是每间房的价格,因为自如是用一张图片和offset来显示价格,所以不 ...
- 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇
项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...
- php爬取房源,用python爬取二手房交易信息并进行分析
用python爬取二手房交易信息并分析第一步:编写爬虫 爬取某平台上海市十个区共900条二手房的交易信息#爬取上海十个区的二手房价信息 import requests from bs4 import ...
- 2021最新python爬取12306列车信息自动抢票并自动识别验证码
项目描述 项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否 ...
- python爬取12306列车信息自动抢票并自动识别验证码(二)selenium登录验证篇
项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时 ...
最新文章
- HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
- 最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事...
- http请求中的Content-Type,详解
- 京东云金山云合并确有其事,或拉开云计算兼并序幕
- 23种计模式之Python实现(史上最全最通俗易懂)内容整改中
- leetcode514. 自由之路(dp)
- android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...
- Vector用法详解
- Extjs中给同一个GridPanel中的事件添加参数的方法
- SQL语句汇总(一)——数据库与表的操作以及创建约束
- Dropping Balls(小球下落)
- Teamcenter Web 端自动登录 (SSO)
- Android基础 --- Widget
- 西电计算机网络ppt,《西安电子科技大学》PPT课件
- IGBT芯片赛道竞争激烈,水光半导体Wassersun推出全新IGBT制程技术
- ipv4转ipv6 山石防火墙命令(教育网)
- 大数据收集系统架构图
- 大众点评app分析记录
- 盘点谷歌浏览器中的一些神级插件
- 蓝桥 算法训练 藏匿的刺客(C语言)
热门文章
- HiveSQL练习题(一)
- 微信小程序入门开发视频教程
- Openssl中的Libcrypto API
- 一级计算机基础及ms office应用练习,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
- Javascript模块化编程,requireJs
- matlab图像的统计特性(均值、标准差、方差、相关系数、等高线)
- 解决ping邮箱服务器域名,提示找不到主机域名的问题
- oracle补充日志
- iOS swift 蓝牙详解(蓝牙中心demo,蓝牙外设demo(可替代mac蓝牙串口调试工具),蓝牙中心框架,gif演示)
- 主机名修改之后VS2017出现TFS问题