国家统计局行政区划获取及入库ES实践

我们先看下最终效果:
在这里插入图片描述

1. ES索引新建
PUT administrative_division
{"mappings": {"properties": {"province": {"type": "keyword"},"province_code": {"type": "keyword"},"city": {"type": "keyword"},"city_code": {"type": "keyword"},"district": {"type": "keyword"},"district_code": {"type": "keyword"},"town": {"type": "keyword"},"town_code": {"type": "keyword"},"committee": {"type": "keyword"},"committee_code": {"type": "keyword"},"type_code": {"type": "keyword"}}},"settings": {"number_of_replicas": 0,"number_of_shards": 1}
}
2. 代码编写

此处代码找的网上大神写的个人认为较为简洁的,直接拿来用改下存储

from lxml import etree
import requests
import time
import random"""
国家统计局行政区划获取
"""
from elasticsearch import helpers, Elasticsearchdef init_es_client(es_host):es = Elasticsearch(hosts=[es_host], verify_certs=False)return eses_client = init_es_client('http://127.0.0.1:9200')actions = list()
count = 0def get_html(url):response = requests.get(url)response.encoding = "utf8"res = response.texthtml = etree.HTML(res)return htmlbase_url = "http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/"
url = base_url + "index.html"
province_html = get_html(url)
province_list = province_html.xpath('//tr[@class="provincetr"]/td')
province_code = province_list[0].xpath('//td/a/@href')
province_name = province_list[0].xpath('//td/a/text()')
province = dict(zip([p.split(".")[0] for p in province_code], province_name))actions = list()
for p_key in province.keys():url_city = base_url + p_key + ".html"time.sleep(random.randint(0, 3))city_html = get_html(url_city)if city_html is None:print("city_html is None", url_city)continuecity_code = city_html.xpath('//tr[@class="citytr"]/td[1]/a/text()')city_name = city_html.xpath('//tr[@class="citytr"]/td[2]/a/text()')city_url = city_html.xpath('//tr[@class="citytr"]/td[1]/a/@href')for c_num in range(len(city_url)):county_url = base_url + city_url[c_num]time.sleep(random.randint(0, 3))county_html = get_html(county_url)if county_html is None:print("county_html is None", county_url)continuecounty_code = county_html.xpath('//tr[@class="countytr"]/td[1]/a/text()')county_name = county_html.xpath('//tr[@class="countytr"]/td[2]/a/text()')county_url = county_html.xpath('//tr[@class="countytr"]/td[1]/a/@href')for t_num in range(len(county_url)):town_url = base_url + "/" + city_url[c_num].split('/')[0] + "/" + county_url[t_num]time.sleep(random.randint(0, 3))town_html = get_html(town_url)if town_html is None:print("town_html is None", town_url)continuetown_code = town_html.xpath('//tr[@class="towntr"]/td[1]/a/text()')town_name = town_html.xpath('//tr[@class="towntr"]/td[2]/a/text()')town_url = town_html.xpath('//tr[@class="towntr"]/td[1]/a/@href')for v_num in range(len(town_url)):code_ = town_url[v_num].split("/")[1].rstrip(".html")village_url = base_url + code_[0:2] + "/" + code_[2:4] + "/" + town_url[v_num]time.sleep(random.randint(0, 3))village_html = get_html(village_url)if village_html is None:print("village_html is None", village_url)continue# 居委村委代码village_code = village_html.xpath('//tr[@class="villagetr"]/td[1]/text()')# 居委村委城乡分类代码village_type_code = village_html.xpath('//tr[@class="villagetr"]/td[2]/text()')# 居委村委名称village_name = village_html.xpath('//tr[@class="villagetr"]/td[3]/text()')for num in range(len(village_code)):v_name = village_name[num]v_code = village_code[num]type_code = village_type_code[num]info = dict()info['province'] = str(p_key).ljust(12, '0')info['province_code'] = province[p_key]info['city_code'] = city_code[c_num]info['city'] = city_name[c_num]info['district_code'] = county_code[t_num]info['district'] = county_name[t_num]info['town_code'] = town_code[v_num]info['town'] = town_name[v_num]info['type_code'] = type_codeinfo['committee_code'] = v_codeinfo['committee'] = v_nameaction = {"_op_type": "index","_index": "administrative_division","_id": v_code,"_source": info}actions.append(action)if len(actions) == 10:helpers.bulk(es_client, actions)count += len(actions)print(count)actions.clear()
if len(actions) > 0:helpers.bulk(es_client, actions)count += len(actions)print(count)actions.clear()

好了,每年更新一次,慢慢跑着吧,当然我们没有考虑历史变更情况,欢迎关注公众号 算法小生,获取第一资讯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装oracle

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

C++从入门到精通——类和对象(中篇)

1. 类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。 class Date {}; 2. 构造函数 2.1 概念 对于以下的日期类&am…

ChatGPT写作攻略:打造精彩论文的秘诀

ChatGPT无限次数:点击直达 ChatGPT写作攻略:打造精彩论文的秘诀 在当今信息爆炸的时代,人们对于高质量且引人入胜的文章需求日益增长。作为一名具有10年经验的CSDN网站原创文章优质创作者,我们不仅要拥有丰富的知识储备和写作技巧&#xff0…

Linux下使用C语言实现高并发服务器

高并发服务器 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 使用多进程并发服务器时要考虑以下几点: 父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体…

AI电商图制作解决方案助力企业高效营销

电商行业蓬勃发展,一张吸睛的电商海报或宣传视频往往能够成为企业吸引顾客、提升品牌形象的利器。然而,传统电商图制作流程繁琐,需要投入大量时间和人力资源,成为众多企业面临的难题。为了解决这一问题,美摄科技凭借其…

前端学习之路-项目实战(1)

每日吐槽:有一个奇怪的问题,怎么一眼看出一个求职者是否是培训班出来的,有的求职上写着,希望大家坦诚一点,but,你这艘诚实的泰坦尼克号终究还是撞上了社会阴暗面的冰山,OMG,不让包装…

Leetcode 239. 滑动窗口最大值和Leetcode 347. 前 K 个高频元素

目录标题 Leetcode 239. 滑动窗口最大值题目描述C语言代码和题解解题思路 Leetcode 347. 前 K 个高频元素题目描述C语言题解和思路解题思路 Leetcode 239. 滑动窗口最大值 题目描述 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最…

Tensorflow(GPU版本配置)一步到位!!!

Tensorflow(GPU版本配置)一步到位!!! CUDA安装CUDA配置Tensorflow配置常见的包 CUDA安装 配置了N次的Tensorflow–Gpu版本,完成了踩坑,这里以配置Tensorflow_gpu 2.6.0为例子进行安装 以下为ten…

数学之光照亮AI之路:探究数学背景在人工智能学习中的优势

在科技日新月异的今天,人工智能(AI)已成为引领未来发展的重要力量。然而,对于许多初涉此领域的学习者来说,AI的复杂性和深度常常让他们望而却步。有趣的是,那些数学基础扎实的人在学习AI时,往往…

【canvas】canvas基础使用(六):图形阴影

简言 学习使用canvas的阴影属性。 阴影 shadowBlur 阴影模糊 CanvasRenderingContext2D.shadowBlur 是 Canvas 2D API 描述模糊效果程度的属性;它既不对应像素值也不受当前转换矩阵的影响。默认值是 0。 语法: ctx.shadowBlur level; 选项值&#x…

Python中的错误处理 - 使用try、except、else和finally进行解释,并附带代码示例

最近,我的经理委派我创建一个自动报告。我设计的报告非常简单。它包括一些来自数据库的数字和一些基本的数学运算。我很兴奋最终可以向公司展示我的惊人的Python技能。 我完成并交付了产品。一切都很顺利。至少,直到大约两周后。我的报告由于除以零错误…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: (电源)插座(电器上的)插口,插孔,管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…

深入探索DBServer:构建高效、可扩展的数据库服务

引言 在当今的数字时代,数据是一切业务和技术解决方案的核心。随着数据量的日益增长,企业和开发者不断寻求高效、可扩展、同时又能保证数据安全性和完整性的数据库管理解决方案。这正是DBServer发挥作用的领域。本文将深入探讨DBServer的概念、特点、如…

重载运算与类型转换

基本概念: 运算符的重载是具有特殊名字的函数;他们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样,重载的匀速阿福也含有返回类型、参数列表以及函数体。重载运算符函数的参数数量和该运算符作用的运算对象数量一样…

PUBG绝地求生更新后无法启动/更新后卡顿?3个解决方法分享

在绝地求生中,团队协作也是非常重要的一点。咱们可以运用strong标签来着重“团队协作”。与队友紧密配合、彼此援助,一起拟定战术和战略,将会大大提高在游戏中获得成功的几率。在绝地求生中获得成功并不简单,但只需咱们把握了一些…

linux的io的知识大全

C语言的io操作 写文件 #include<stdio.h> #include<string.h>#define FILE_NAME "log.txt" int main() {FILE * fp fopen(FILE_NAME, "w");if(fpNULL){printf("fopen error!\n");}const char* msg "hello zk\n";int c…

JS rgb,hex颜色值转换

颜色值转化 rgb颜色值转换为hex颜色值&#xff08;rgb>hex&#xff09; hex颜色值转换为rgb颜色值&#xff08;hex>rgb&#xff09; 代码&#xff1a; const hex2Rgb (hex) > {return rgb(${parseInt(hex.slice(1, 3), 16)},${parseInt(hex.slice(3, 5), 16)},${p…

北邮通报学生联名举报导师事件,导师PUA学生,学生只有压榨它

诸葛亮为激司马懿出战&#xff0c;派使者送给他女人的衣服&#xff0c;司马懿欣然接受后问使者&#xff1a;“你们家丞相都管些什么呀&#xff1f;” 使者回答道&#xff1a;“我们丞相从行军布阵到饮食起居&#xff0c;无一不亲自过问。” 司马懿听到心中大喜&#xff0c;心想…

【ARM Coresight SOC-600 -- ETF Flushin无法接收到 CTI 发出 triggerout 信号问题分析】

请阅读【嵌入式开发必备专栏 】 文章目录 问题背景波形分析问题背景 在做验证的时候,准备通过 CTI2 给 SOC 上的 ETF 触发一个 flushin 动作,然后stop住 formatter,结果一致发现没有成功,接下来就是分析的过程了。 首先检查了代码,没有发现代码有什么问题(一般自己写的代…

学习大数据,所需要的java(Maven)基础(1)

文章目录 使用Maven的优势第三方jar包添加第三方jar包获取jar包之间的依赖关系jar包之间的冲突处理将项目拆分成多个工程模块 实现项目的分布式部署Maven是什么自动化构建工具构建的概念构建环节自动化构建 Maven如何使用安装Maven核心程序maven联网问题Maven中的settings配置在…