实战项目-基于国家统计局城乡规划数据的地名提取(1)

超简单的小项目,涉及到简单的爬虫以及基础的python编程知识。很简单哦

最近手里有一份公司的名单,其中大部分包含了地名信息。要求根据公司名称,获取到公司所属的地级市。类似于如下。可以看到每个公司名称都会包含一个地名信息,但其中有一部分是xx县xx乡xx区,对于这一部分信息就需要找到这个地名他所属的上级地级市


我最终用了一种曲线救国的办法。首先用分词工具将公司名称中的地名提取出来,然后采集国家统计局地名数据,根据地名匹配到公司所属地级市。

这里我使用的分词工具是jieba。结巴使用方法也很简单,直接pip安装就行 。pip install jieba

拿一个公司名测试下,可以看到已经将地名完美分割出来。

// An highlighted block
import jiebawords = jieba.lcut('铜陵市建设投资控股有限责任公司')
print(words)


接下来就是获取全国的地名数据,并保存为json文件。这一部分我是采集了国家统计局城乡规划的官网。

http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html

网站很简洁,一个基本上没有反爬措施的静态页面,使用request+xpath+json可以完美实现。

接下来简单分析一下页面,因为是静态页面,所以直接打开F12的elements分析就行。这个网站首页是省份的列表页,然后点击进入,依次是地级市-区-镇/乡等的列表页。


对于省份的列表页,可以通过xpath提取出数据


后续地级市,区,区以下地名数据采集与省份列表页相似,就不一一赘述了。需要注意的是,最终需要保存的数据结构分为两种类型。

1.[{湖南省:{郴州市:{***区:[地名1, 地名2, .....], }, {}, {}....}, {}, {}, ....}, {}, {}........]一个大列表 列表中每个元素是字典,每个字典中包含每个省份的地级市信息,每个地级市对应地级市下属地名信息的字典,由此类推。方便根据地名,向上匹配地级市。2.[{湖南省:[地名1, 地名2, .....]}, {}, {},....]一个大列表 列表中每个元素是字典,字典中每个键是省份,值是每个省份下所有地名信息。方便根据地名,向上匹配省份。

在数据采集完毕后,需要保存为本地文件。将python数据结构存储为实体文件,其实有两种方式。分别是pickle,json。

在这里我选择json保存,

确定了保存结构之后,完善代码如下

// An highlighted block
import requests
from lxml import etree
import time
import jsonheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36,',# 'Host': 'www.stats.gov.cn',# 'Cookie': '_trs_uv=k163tn1b_6_51kd; AD_RS_COOKIE=20080918',
}start_url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/'
time.sleep(3)
rep = requests.get(start_url, headers=headers)
rep.encoding = rep.apparent_encoding
Text = rep.text
sel = etree.HTML(Text)Province_names = sel.xpath('//*[@class="provincetr"]/td/a/text()')   # 省或直辖市名称
Province_urls = sel.xpath('//*[@class="provincetr"]/td/a/@href')     # 省或直辖市url
China_place_data = {}
china_place_data = {}for Province_name, Province_url in zip(Province_names, Province_urls):Province_url = start_url + Province_urlrep = requests.get(Province_url, headers=headers)time.sleep(3)rep.encoding = rep.apparent_encodingsel = etree.HTML(rep.text)Province = []     # 省份下地名列表City_names = sel.xpath('//tr[@class="citytr"]/td[2]/a/text()')  # 地级市名称City_urls = sel.xpath('//tr[@class="citytr"]/td[2]/a/@href')    # 地级市urlProvince += City_names  # 加入省份下地名列表china_place_data[Province_name] = {}for City_name, City_url in zip(City_names, City_urls):City_url = start_url + City_urlrep = requests.get(City_url, headers=headers)time.sleep(3)rep.encoding = rep.apparent_encodingsel = etree.HTML(rep.text)County_names = sel.xpath('//tr[@class="countytr"]/td[2]/a/text()')   # 区名称County_urls = sel.xpath('//tr[@class="countytr"]/td[2]/a/@href')    # 区urlProvince += County_names  # 加入省份下地名列表china_place_data[Province_name][City_name] = {}for County_name, County_url in zip(County_names, County_urls):County_url = Province_url.replace('.html', '/') + County_urlrep = requests.get(County_url, headers=headers)time.sleep(3)rep.encoding = rep.apparent_encodingText = rep.textsel = etree.HTML(Text)Town_names = sel.xpath('//tr[@class="towntr"]/td[2]/a/text()')   # 镇名称Town_urls = sel.xpath('//tr[@class="towntr"]/td[2]/a/@href')     # 镇urlProvince += Town_names  # 加入省份下地名列表china_place_data[Province_name][City_name][County_name] = Town_namesprint('{}采集完毕'.format(County_name))print('{}采集完毕'.format(Province_name))China_place_data[Province_name] = Provinceprint(China_place_data)
print(china_place_data)China_place_data = json.dumps(China_place_data)    # 转换为json格式
china_place_data = json.dumps(china_place_data)    # 转换为json格式
with open('China_place_data.json', 'w') as f:   # 保存为json文件f.write(China_place_data)with open('china_place_data.json', 'w') as f:   # 保存为json文件f.write(china_place_data)

其中China_place_data与china_place_data分别对应以上两种数据结构。

每次请求之间加入了3秒休眠,做一个有素质的爬虫。

基于国家统计局的地名提取爬虫部分就到此结束啦。

欢迎扫码关注:

基于国家统计局城乡规划数据的地名提取(1)相关推荐

  1. 城乡规划现状数据移动调研系统开发

    城乡规划现状数据移动调研系统开发 这是在13年开发的用于在移动终端进行现状数据调研的系统,因为原来单位是城市规划行业,所有系统也是针对城乡规划现状数据的调研,项目获得15年吉林省优秀城乡规划设计奖. ...

  2. arcgis交通可达性分析步骤_【规划广角】街道慢行品质的多维度评价与导控策略——基于多源城市数据的整合分析...

    欢迎点击以上蓝色字体 关注规划师杂志 作者苏州规划设计研究院交通所所长.同济大学建筑与城市规划学院博士研究生樊钧,同济大学建筑与城市规划学院硕士研究生唐皓明,同济大学建筑与城市规划学院助理教授.硕士生 ...

  3. 干货|如何采集城乡规划大数据及可视化分析

    数据可视化已经成为了各个行业竞相追逐的一个词汇,从阿里巴巴的阿里云,到百度的百度图说,再到建筑设计,景观.城乡规划等行业也是喷薄而出,项目的前期数据分析,已经成为了市场经济下不可或缺的一环. 大数据时 ...

  4. 点云平面提取_基于LiDAR点云数据滤波方法

    基于LiDAR点云数据滤波方法 机载激光雷达所获取的数据被称为"点云(points cloud)"它在三维空间中呈现出随机分布的形状.在点云中,有些点属于真实的地形表面的点,有些点 ...

  5. 基于激光点云数据自动化实现道路标线分类、提取及矢量化

    Automatic Road Markings Extraction Classification And Vectorization Mobile From Laser Scanning Data ...

  6. 基于城市交通监控大数据的行程时间估计

    点击上方蓝字关注我们 基于城市交通监控大数据的行程时间估计 李文明1, 刘芳1, 吕鹏1, 于彦伟2 1 烟台大学计算机与控制工程学院,山东 烟台 264005 2 中国海洋大学计算机科学与技术系,山 ...

  7. 基于百度时空大数据的城市计算(讲座精华笔记)

    基于百度时空大数据的城市计算(讲座精华笔记) THU数据派 2017-05-27 23:24 [导读]本文整理自2017年5月24日,百度自动驾驶事业部创始团队成员.高级技术顾问秦伟俊博士在清华大数据 ...

  8. ArcGIS在国土空间·城乡规划中的实战应用

    1 内容介绍 一 规划数据的采集与管理 二 国土空间规划符号库制作 三 区位分析图的制作 四 填挖方分析 五 基于GIS的城市用地适宜性分析 六 交通网络构建与交通网络分析 七 基于GIS的福州市交通 ...

  9. 【信息技术】【2016.07】基于视觉和遥感数据的多模式学习

    本文为澳大利亚悉尼大学(作者:Dushyant Rao)的博士论文,共164页. 无人驾驶汽车通常被部署在未知的环境中执行探测和监测任务.在这种应用中,信息丰富性和不同传感器模式的获取成本之间往往存在 ...

最新文章

  1. Java生鲜电商平台-监控模块的设计与架构
  2. Service随系统启动运行
  3. linux下电池测试软件,你们要的App电量分析测试来了
  4. 如何打造组织级敏捷,你想知道的都在这里!
  5. 鳞翅目动物的诅咒:玩java.time
  6. CS231n(1):图片分类笔记与KNN编程作业
  7. 名校博士生被电信诈骗10多万,却被嘲“博士也会被骗书白读了”,学校发声!...
  8. 计算机网络网络层之数据报网络
  9. MySQL varbinary类型字段 java怎么取
  10. 解决Firefox3下Flashgot的”AddRef”问题
  11. lisp方格网法计算土方量_方格网法计算土方量实例例题
  12. 如何减少PDF文件的大小,为pdf瘦身?
  13. CIO40知识星球:越高级越自律
  14. 华为ENSP实验--基础
  15. KaTex公式居左对齐
  16. ssm毕设项目康健医药公司进销存管理22jao(java+VUE+Mybatis+Maven+Mysql+sprnig)
  17. 14岁男孩倒卖土地赚1700万 网友急回家跪求父母买土地
  18. 已解决:好用的集成PHP环境 一键安装包PHPNow--Win7下安装phpnow的方法出现[ Apache_pn ] 错误的解决 !(亲自测试通过)
  19. RoboMaster电控学习笔记——电机控制(1-CAN)
  20. 计算机扫涂卡答案什么样就合格,中高考电脑阅卷流程曝光!不避开这些“坑”,就要白白丢分了...

热门文章

  1. 2021上岸东南大学网络空间安全学院916学硕心得分享——初试篇
  2. 家用计算机按键不灵怎么修,电脑的键盘失灵了怎么办 台式电脑键盘失灵的处理步骤...
  3. hac 估计 matlab程序,CV算法:K-means 、HAC、Mean Shift Clustering
  4. 如何防御DDoS攻击和CC攻击
  5. 国内外14家高精地图企业对比
  6. 对话本体创始人李俊——有关IEO、DApp、区块链游戏的一些冷思考
  7. java 变量类型_Java 变量类型
  8. 读懂波卡的“三把杀手锏”,跨链未来解决方案
  9. 深度学习的不确定性(Uncertainty/confidence score)与校准(Calibration)
  10. 声光控延时开关设计原理