写个页面需要有省市区三级联动,缺少最新的城市信息,从网上找了些资源,发现写的各有特色,有的资源里面的语法奇葩到无语,灼瞎我的眼呀,无奈自己就简写了一个脚本,发现统计局的规律还是挺奇特的,开始用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相关推荐

  1. Python爬取国家统计局行政区划信息

    1. 简介: 2020年统计用区划代码和城乡划分代码,将其中的行政区划爬取并保存成树状结构,以支持类似如下查询: dic['北京市']['市辖区'].keys() dict_keys(['东城区', ...

  2. Python3爬取国家统计局官网2019年全国所有城市(2020年更新)

    Python3爬取国家统计局官网2019年全国所有城市(2020年更新) 一级城市爬取 一级城市爬取 由于最近需要用到所有城市的数据,故从统计局爬取19年的一级城市数据 import random i ...

  3. Python爬取国家统计局官网最新全国所有城市县镇数据

    最近项目里需要省市区村的数据,网上找了很多方法,都没有如意的,有的老数据竟然还要钱,要积分的我也还认可,我在网上查了下,参考了这位老兄的博客,自己又动手把第五级村级行政加了上去.下面请看大屏幕,我要划 ...

  4. python爬取12306列车信息自动抢票并自动识别验证码(一)列车数据获取篇

    项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master].注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一 ...

  5. python爬取自如房间信息(一)

    使用python和selenium+Chrome Headless爬取自如房间信息,并将结果存储在MongoDB中.其中最麻烦的应该是每间房的价格,因为自如是用一张图片和offset来显示价格,所以不 ...

  6. 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇

    项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...

  7. php爬取房源,用python爬取二手房交易信息并进行分析

    用python爬取二手房交易信息并分析第一步:编写爬虫 爬取某平台上海市十个区共900条二手房的交易信息#爬取上海十个区的二手房价信息 import requests from bs4 import ...

  8. 2021最新python爬取12306列车信息自动抢票并自动识别验证码

    项目描述 项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否 ...

  9. python爬取12306列车信息自动抢票并自动识别验证码(二)selenium登录验证篇

    项目前言 自学python差不多有一年半载了,这两天利用在甲方公司搬砖空闲之余写了个小项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时 ...

最新文章

  1. HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
  2. 最近开发老遇到莫名其妙的问题,dialog自定义大小,setAttributes这个方法没反应是肿么一回事...
  3. http请求中的Content-Type,详解
  4. 京东云金山云合并确有其事,或拉开云计算兼并序幕
  5. 23种计模式之Python实现(史上最全最通俗易懂)内容整改中
  6. leetcode514. 自由之路(dp)
  7. android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...
  8. Vector用法详解
  9. Extjs中给同一个GridPanel中的事件添加参数的方法
  10. SQL语句汇总(一)——数据库与表的操作以及创建约束
  11. Dropping Balls(小球下落)
  12. Teamcenter Web 端自动登录 (SSO)
  13. Android基础 --- Widget
  14. 西电计算机网络ppt,《西安电子科技大学》PPT课件
  15. IGBT芯片赛道竞争激烈,水光半导体Wassersun推出全新IGBT制程技术
  16. ipv4转ipv6 山石防火墙命令(教育网)
  17. 大数据收集系统架构图
  18. 大众点评app分析记录
  19. 盘点谷歌浏览器中的一些神级插件
  20. 蓝桥 算法训练 藏匿的刺客(C语言)

热门文章

  1. HiveSQL练习题(一)
  2. 微信小程序入门开发视频教程
  3. Openssl中的Libcrypto API
  4. 一级计算机基础及ms office应用练习,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
  5. Javascript模块化编程,requireJs
  6. matlab图像的统计特性(均值、标准差、方差、相关系数、等高线)
  7. 解决ping邮箱服务器域名,提示找不到主机域名的问题
  8. oracle补充日志
  9. iOS swift 蓝牙详解(蓝牙中心demo,蓝牙外设demo(可替代mac蓝牙串口调试工具),蓝牙中心框架,gif演示)
  10. 主机名修改之后VS2017出现TFS问题