由于工作中使用国家统计局划分的区域码,本文使用python爬取地方划分码,地址:http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
本文爬取的是2018年发布的划分码,最新的划分码分为省、市、县、城镇、村庄.
代码:

# -*- coding: utf-8 -*-
import requests
import sys
import re
from bs4 import BeautifulSoup
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Cookie": "AD_RS_COOKIE=20081945; _trs_uv=jrhivtz7_6_jyyw",
"Host": "www.stats.gov.cn",
"If-Modified-Since": "Thu, 05 Jul 2018 00:43:11 GMT",
"If-None-Match": "17b5-57035d4e665c0-gzip",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}def getItem(itemData, dataArray, parentRequestUrl, table, type):item = {}# 名称if(type == 5):item['name'] = str(dataArray[2].get_text())else:item['name'] = str(dataArray[1].get_text())# 下一级请求urlhref = re.findall('(.*)/', parentRequestUrl)if type != 5:item['url'] = href[0] + "/" + dataArray[0].get('href')# 父级codeitem['parentCode'] = itemData.get('code')# 类型item['type'] = type# code码item['code'] = str(dataArray[0].get_text())[0:12]# if type == 4:#     print(item.get('url'))# 打印出sql语句print('insert into %s(name,code,type,parent_code) values (%s,%s,%s,%s)' % (table, item['name'], item['code'], item['type'], item['parentCode']) + ";")return item# 获取BeautifulSoup
def getSoup(requestUrl):htmls = requests.get(requestUrl, headers=headers)htmls.encoding = 'GBK'soup = BeautifulSoup(htmls.text, 'html.parser', from_encoding='UTF-8')return soup# 循环处理
def loopItem(label, labelClass, labelChild, item, requestUrl, type, tableName, lists):for link in soup.find_all(label, labelClass):array = link.find_all(labelChild, class_='')if not len(array):continueitemData = getItem(item, array, requestUrl, tableName, type)lists.append(itemData)requestProviceUrl = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html'
soup = getSoup(requestProviceUrl)
# 省列表
provinceList = []
for link in soup.find_all('a', class_=''):requestCityUrl = re.findall('(.*)/', requestProviceUrl)item = {}# 名称item['name'] = str(link.get_text())# 下一级请求urlhref = str(link.get('href'))item['url'] = requestCityUrl[0] + "/" + href# 父级codeitem['parentCode'] = '000000000000'# 类型item['type'] = 1# code码item['code'] = (href.split('.'))[0] + '0000000000'provinceList.append(item)# 打印出sql语句# print('====>',types)print('insert into province(name,code,type,parent_code) values (%s,%s,%s,%s)' % ((item['name'] + ''), item['code'], item['type'], item['parentCode']) + ";")# 市列表
cityList = []
for item in provinceList:# 测试正常退出cityRequestUrl = str(item.get('url'))soup = getSoup(item.get('url'))loopItem('tr', 'citytr', 'a', item, cityRequestUrl, 2, 'city', cityList)# 县列表
countyList = []
for item in cityList:# 测试正常退出countyRequestUrl = str(item.get('url'))soup = getSoup(item.get('url'))loopItem('tr', 'countytr', 'a', item,countyRequestUrl, 3, 'county', countyList)# 城镇列表
townList = []
for item in countyList:# 测试正常退出townRequestUrl = str(item.get('url'))soup = getSoup(item.get('url'))loopItem('tr', 'towntr', 'a', item, townRequestUrl, 4, 'town', townList)# 村庄列表
villageList = []
for item in townList:# 测试正常退出villageRequestUrl = str(item.get('url'))soup = getSoup(item.get('url'))loopItem('tr', 'villagetr', 'td', item,villageRequestUrl, 5, 'village', villageList)

解析html使用的是BeautifulSoup,十分简单方便,上文直接生成sql语句,输出到控制台即可.运行结果:

史上最全国家统计局划分代码爬取相关推荐

  1. 史上最全的autojs代码仓库

    autojsDemo 史上最全的autojs代码仓库 https://github.com/snailuncle/autojsDemo 魔力sama的@auto.pro 开箱即用的 auto.pro ...

  2. 火焰传感器感应有火亮灯代码_史上最全燃气壁挂炉故障代码,这个值得收藏

    再好的产品也有可能会出现故障, 如果家里的壁挂炉出现故障了, 显示了一些字母代码, 你知道这些字母代码是什么意思吗? 又该采取什么措施去解决呢? 下面总结了一些品牌壁挂炉的故障代码, 供大家参考. 威 ...

  3. 播放失败246106异常代码_史上最全燃气壁挂炉故障代码,这个值得收藏

    再好的产品也有可能会出现故障, 如果家里的壁挂炉出现故障了, 显示了一些字母代码, 你知道这些字母代码是什么意思吗? 又该采取什么措施去解决呢? 下面总结了一些品牌壁挂炉的故障代码, 供大家参考. 威 ...

  4. 可能是史上最全 Vue 前端代码风格指南

    作者:卡喵妹 https://juejin.cn/post/6987349513836953607 一.命名规范 市面上常用的命名规范: camelCase(小驼峰式命名法 -- 首字母小写) Pas ...

  5. 史上最全蓝屏代码!电脑蓝屏了查一下什么原因吧!

    2019独角兽企业重金招聘Python工程师标准>>> 以下方法仅适用win8以前的系统win8及win8以后的系统需要其他方法! 蓝屏 A problem has been det ...

  6. html的加重语气标签,史上最全的HTML代码

    HTML常用标记一览表 标记 类型 译名或意义 作 用 备注 HTML文件标记 ● 文件声明 让浏览器知道这是 HTML 文件 熟 ● 开头 提供文件整体资讯 熟 ● 标题 定义文件标题,将显示于浏览 ...

  7. 史上最全AI开源项目集结,近万篇附代码的论文分门别类整理好

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 这个资源一经分享出来,Twitter的评论区就成了"大型英文赞美词汇堆叠现场",几千人争相转发点 ...

  8. Vue2.0史上最全入坑教程(中)—— 脚手架代码详解

    2019独角兽企业重金招聘Python工程师标准>>> 书接上文我们说道,如何利用脚手架(vue-cli)构建一个vue项目,本回书我们一起来学习分析下代码. 回顾下创建后的项目目录 ...

  9. java sleep方法_6种快速统计代码执行时间的方法,真香!(史上最全)

    我们在日常开发中经常需要测试一些代码的执行时间,但又不想使用向 JMH(Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Jav ...

最新文章

  1. 打开云服务器连不上网,云服务器怎么连接网络连接不上
  2. 每个 JavaScript 开发者都该懂的 Unicode
  3. 开发日记-20190525 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  4. 抽象类(abstract class)和接口(Interface)的区别
  5. php免费根据ip查城市,根据ip获取城市的方法
  6. EOS1.1版本新特性介绍
  7. 想要实现自动驾驶?高精度地图不可或缺
  8. not是什么意思在c语言,为什么在C样式语言中逻辑NOT运算符是“!”而不是“ ~~”?...
  9. 废柴日记之中秋特辑:那些年我们一直分不清楚的近义词们①
  10. 8. Zigbee应用程序框架开发指南 - 事件
  11. 操作系统之线程和进程
  12. matlab中水平垂直线,关于Matlab:水平-垂直线
  13. 英语3500词(18/20)health主题(2022.4.28)
  14. sklearn——转换器(Transformer)与预估器(estimator)
  15. 自己编写的MyXMindUtils(XMind转json串)
  16. 我爱Flask之URL和Flask视图介绍
  17. 143.如何个性化推荐系统设计-3
  18. 机场精细化管理_【青海机场公司召开“强化‘三基’固根本 精益管理促发展”主题交流会议】...
  19. 【2017.11.15】设计师的正确工作流程
  20. Camtasia Studio 2020mac免费注册激活下载安装教程(屏幕录制及视频编辑软件)

热门文章

  1. [Django] 单元测试小记
  2. 第二十九章 SQL函数 COALESCE
  3. 国外知名网站Stackoverflow 历时两年评选出11本对程序员最有影响力的书籍
  4. int mysql是什么意思_MySQL数据类型 int什么意思
  5. Pytorch 中的 torch.optim.swa_utils.AverageModel() 及其原理总结
  6. Unity简单几行代码让玩家水平移动更丝滑真实
  7. SVN本地空间占用几乎是服务器的两倍
  8. 计算机网络网络适配器的作用是什么原因,网络适配器的作用_网络适配器删了怎么办...
  9. javaScript将网页放到桌面,发送快捷方式到桌面
  10. 520表白html,html5 canvas全屏的520爱心表白网页代码