Python IP解析器 ip2region使用

说明:最近需要在python项目内使用IP定位所在城市的需求,没有采用向外部ISP服务商API请求获取信息的方案,则翻了翻,在搞Java时很多的方案,在Python端反而可选择范围很小。
# 示例查询
ips = ["106.38.188.214", "203.93.215.16", "106.38.188.100",
"221.130.191.216", "47.98.14.174"]
一:geoip2 定位五个IP效果

二:ip2region 定位五个IP效果

问题说明:本文除了对比这两个IP解释器,同时还是为了使用当前的ip2region在Python环境的使用,因为ip2region在Python项目内无法安装模块,导致我花不少时间才搞定,大家走这个路线就好了,避免大家遇到同样当不必要的其他阻碍。
1. 下载 ip2region 项目资源
我们主要采用的是离线模式的ip2region,首先手动从 GitHub 下载 ip2region 解析器
ip2region.xdb数据库文件: 点击下载xdb_searcher.py(官方解析器):点击下载
2. 创建ip2region工具类
工具类名称大家自定义即可,我的类目:ip_utils_ip2region.py
import os
from utils.ip.xdbSearcher import XdbSearcher
from loguru import loggerclass IP2RegionInfo:"""todo 存储 IP 解析出来的相关信息"""def __init__(self, country=None, province=None, city=None, isp=None):self.country = countryself.province = provinceself.city = cityself.isp = ispdef __str__(self):return f"{self.country},{self.province},{self.city},{self.isp}"class IP2RegionLoader:"""todo ip2region数据加载器-单例模式"""_searcher = None@classmethoddef get_searcher(cls):if cls._searcher is None:# 获得指定文件的绝对路径-本次模式使用的当前python函数所在文件夹的目录db_path = os.path.join(os.path.dirname(__file__), "ip2region.xdb")if not os.path.exists(db_path):raise FileNotFoundError("请下载 ip2region.xdb 并修改路径!")try:# 加载 xdb 数据库cls._searcher = xdbSearcher.XdbSearcher(dbfile=db_path)logger.info("成功加载 ip2region.xdb 数据库")except Exception as e:logger.error(f"加载数据库时出错: {e}")raisereturn cls._searcher@classmethoddef close_searcher(cls):if cls._searcher is not None:cls._searcher.close()cls._searcher = Nonelogger.info("已关闭 ip2region 数据库搜索器")# 查询 IP 地址的具体信息
def ip2region_location_ip(ip):try:searcher = IP2RegionLoader.get_searcher()result = searcher.search(ip)# 解析查询结果:ip2region 返回的格式类似于 "国家|省份|城市|ISP"region_info = result.split('|')if len(region_info) < 4:logger.warning(f"IP {ip} 查询结果格式异常: {result}")return IP2RegionInfo()# 构造 IP2RegionInfo 对象ip_info = IP2RegionInfo(country=region_info[0], province=region_info[2], city=region_info[3],isp=region_info[4])return ip_infoexcept Exception as e:logger.error(f"查询 IP {ip} 时发生错误: {e}")return Noneif __name__ == '__main__':# 示例查询ips = ["106.38.188.214", "203.93.215.16", "106.38.188.100", "221.130.191.216", "47.98.14.174"]for ip in ips:result = ip2region_location_ip(ip)if result:logger.info(f"IP {ip} 归属地信息: {result}")else:logger.error(f"IP {ip} 查询失败!")# 关闭搜索器IP2RegionLoader.close_searcher()
3. 资源文件关系目录
三个文件的文件关系目录,先跑起来,然后大家做自己的自定义哈,如图所示:

OK,这样就搞定了,直接运行即可,可以直接当成一个工具函数使用,祝各位编程顺利
这是近一年来转人工智能方向后,今年开始第三篇文章!
资源上传到了这儿
我用夸克网盘分享了「python_ip2Region_code.rar」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/25b5dbb70fff
提取码:VJQT
相关文章:
Python IP解析器 ip2region使用
说明:最近需要在python项目内使用IP定位所在城市的需求,没有采用向外部ISP服务商API请求获取信息的方案,则翻了翻,在搞Java时很多的方案,在Python端反而可选择范围很小。 # 示例查询 ips ["106.38.188.214"…...
labview与西门子1500plc进行S7通讯(仿真效果)
环境: 1.博图V16 2.S7-PLCSIM Advanced V3.0 3.labview2020 4.HslCommunication的dll文件 运行效果图 通过使用HslCommunication的库文件来对西门子plc进行通讯 labview代码 代码打包 通过网盘分享的文件:labview进行s7通讯测试.rar 链接: https:/…...
Oracle 公布 Java 的五大新功能
Java 增强提案包括语言增强和性能优化,从 JDK 25 中的稳定值 API 开始。 随着JDK(Java 开发工具包)24刚刚全面上市,Oracle 提前透露了不久的将来即将推出的 Java 功能,包括增强原始装箱到空限制值类类型。 3 月 18 日…...
台式机电脑组装---电脑机箱与主板接线
台式机电脑组装—电脑机箱与主板接线 1、机箱连接主板的跳线一般主要有USB 2.0、USB 3.0、前置音频接口(HD_AUDIO)以及POWER SW、RESET SW、POWER LED、HDD LED四个主板跳线,这些跳线分别的含义如下。 RESET SW:机箱重启按键;注:…...
ubuntu高并发内核参数调优 - (压测客户端调优)
业务上要求集群提供10w并发,10w并发听上去不是很难,但10w并发持续1小时呢 在业务上线之前还需要我们自己对业务进行压测,俗称benchmark。 压测的服务器也是需要进行性能调优的,以下列出调优前后的参数对比,更直观的分析…...
动作捕捉手套如何让虚拟现实人机交互 “触手可及”?
在虚拟与现实逐渐交融的当下,动作捕捉技术正以前所未有的速度革新着多个领域。 动作捕捉技术,简称“动捕”,已经从早期的影视特效制作,逐步拓展到游戏开发、虚拟现实、机器人控制等多个领域。 而mHandPrO数据手套作为这一领域的…...
笔记本电脑关不了机是怎么回事 这有解决方法
在快节奏的现代生活中,笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中,笔记本电脑突然关不了机了,怎么回事?下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法,有需要的可以来看看。 一、…...
数据库:一文掌握 MongoDB 的各种指令(MongoDB指令备忘)
文章目录 入门连接 MongoDB Shell显示数据库切换数据库显示集合运行 JavaScript 文件 CRUD创建寻找文件使用运算符查找文档读取更新删除 数据库和集合Drop创建集合其他采集功能 索引列表索引创建索引删除索引隐藏/取消隐藏索引 方便的命令 其它改变流分片集群副本集 MongoDB 此…...
麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB
在内网环境下,使用麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB 程序,这确实复杂,但仍然有可行的解决方案。麒麟操作系统是国产化的 Linux 发行版(如基于 Ubuntu Kylin 或银河麒麟),因…...
给管理商场消防安全搭建消防安全培训小程序全过程
一、需求沟通 “我是管理商场消防安全的嘛,做这个的作用呢,1是商场的所有商户员工可以看平面或者视频随时自学, 2是我们定期培训必修课程、考试,这个需要留存他们的手签字的签到表确认我们讲给他们听了(免责很重要&am…...
Flutter:页面滚动,导航栏背景颜色过渡动画
记录:导航默认透明,页面发生滚动后,导航背景色由0-1,过渡到白色背景。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:redo…...
VSCode + CMake
参考文献: 如何用 GCC, CMake 和 Make 编译C/C代码Windows 上的 Linux 子系统:WSLWSL:桌面 UI 远程连接 RDP 配置 VScode 文章目录 CMake 配置VSCode 配置launch.jsontask.jsonc_cpp_properties.json CMake 配置 编写如下的 CmakeLists.t…...
Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍
大家好我是木木,在当今快速发展的云计算与云原生时代,容器化技术蓬勃兴起,Docker 作为实现容器化的主流工具之一,为开发者和运维人员带来了极大的便捷 。下面我们一起开始进阶第1篇:什么是Docker数据卷?为什…...
(2025|ICLR|华南理工,任务对齐,缓解灾难性遗忘,底层模型冻结和训练早停)语言模型持续学习中的虚假遗忘
Spurious Forgetting in Continual Learning of Language Models 目录 1. 引言 2. 动机:关于虚假遗忘的初步实验 3. 深入探讨虚假遗忘 3.1 受控实验设置 3.2 从性能角度分析 3.3 从损失景观角度分析 3.4 从模型权重角度分析 3.5 从特征角度分析 3.6 结论 …...
从两指到三指:Robotiq机器人自适应夹持器技术解析
工业自动化离不开高效工具的支持。Robotiq机器人工具凭借其模块化设计和智能化编程技术,提升了设备的灵活性和操作效率。Robotiq机器人工具精准的传感器和自适应夹持器技术,能够满足多样化的应用需求,为制造业、物流和科研等领域提供可靠的解…...
【css酷炫效果】纯CSS实现悬浮弹性按钮
【css酷炫效果】纯CSS实现悬浮弹性按钮 缘创作背景html结构css样式完整代码效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492020 缘 创作随缘,不定时更新。 创作背景 刚看到csdn出活动了&…...
力扣222. 完全二叉树的节点个数(Java实现)
222. 完全二叉树的节点个数 1. 思路 这个题最简单的做法就是暴力遍历,时间复杂度为O(n)。 我们现在用低于O(n)的做法解决问题。 对于一棵满二叉树,它的节点数 2 h - 1 (h 是指树一共有多少层) 头节点不断遍历左孩子直至为null,得到树高…...
MySQL函数大全(持续更新)
MySQL常用函数 一、字符串函数 函数功能 CONCAT(s1, s2, ...) 拼接字符串 CONCAT_WS(sep, s1, s2, ...) 指定分隔符拼接字符串 SUBSTRING(str, start, length) 截取字符串 LEFT(str, length) 从左边截取指定长度字符串 RIGHT(str, length) 从右边截取指定长度字符串 LENGTH(s…...
Django系列教程(13)——Cookie和Session应用场景及案例
目录 什么是cookie,cookie的应用场景及缺点 Django中如何使用cookie Cookie使用示例 什么是session及session的工作原理 Django中如何使用会话session Session使用示例 小结 HTTP协议本身是”无状态”的,在一次请求和下一次请求之间没有任何状态保…...
element-ui pagination 组件源码分享
pagination 分页组件源码分享,主要从以下三个方面: 1、pagination 组件页面结构。 2、pagination 组件属性。 3、pagination 组件方法。 一、组件页面结构。 二、组件属性。 2.1 small 是否使用小型分页样式,类型为 boolean,…...
【css酷炫效果】纯CSS实现火焰文字特效
【css酷炫效果】纯CSS实现火焰文字特效 缘创作背景html结构css样式完整代码基础版进阶版(冰霜版) 效果图 想直接拿走的老板,链接放在这里:https://download.csdn.net/download/u011561335/90492005 缘 创作随缘,不定时更新。 创作背景 刚…...
【java面型对象进阶】------继承实例
继承结构下的标准Javabean 代码如下: package demo10;//定义员工父类 public class Employee {private String id;private String name;private double salary;//构造方法public Employee(){}public Employee(String id,String name,double salary){this.idid;thi…...
Oracle 19c 子分区表索引测试
一、建表语句放在最后,方便查看 二、创建各类索引 --创建本地的主键约束,但必须加上分区键、子分区键MT_O_CODE,M_YMD alter table MS_DMG.A_RED drop constraint MGR_PK_AREAD ; alter table MS_DMG.A_RED add constraint MGR_PK_AREAD primary key …...
【数据分享】1999—2023年地级市固定资产投资和对外经济贸易数据(Shp/Excel格式)
在之前的文章中,我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据、房地产投资情况和商品房销售面积相关指标数据、社会消费品零售总额和年末金融机构存贷款余额、各类用地面积、地方一般公共预算…...
Spring Boot 与 Couchbase 整合教程
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 与 Couchbase 整合教程 环境要求 JDK 8Spring Boot 2.7.xCouchbase Server 7.xMaven/Gradle 步骤 1:创建Spring Boot项目 使用 st…...
数据结构——串、数组和广义表
串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1a2...an(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...
Spring中DI与IOC的关系解析
在Spring框架中,DI(依赖注入)和IOC(控制反转)是两个核心概念,它们密切相关但有不同的侧重点。 IOC(控制反转) IoC 是一种设计原则,将对象的创建和依赖管理交给框架或容…...
pycharm-python國際象棋遊戲代碼
嗯,用户的问题是“pycharm寫關於python國際象棋遊戲代碼”,也就是要用PyCharm来写一个Python的国际象棋游戏代码。我需要先整理一下用户提供的搜索结果,看看有什么相关的信息可以利用。 首先看搜索结果中的各个网页内容。网页1主要讲的是象棋…...
【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解
未经许可,不得转载。 文章目录 MVC模型模型(Model)视图(View)控制器(controller)MVC工作流程 项目结构java目录resources目录webapp目录 依赖管理配置文件 MVC模型 MVC(Model-View-…...
单片机ADC+NTC温度采集电路学习
文章目录 前言一、NTC是什么?二、NTC重要参数三、实际应用举例四、NTC和PTC的区别总结 前言 NTC常用来检测外部环境或者电池温度,及汽车水温传感器。 有时候电池并不内置NTC,所以需要外置NTC来采集电池温度,注意要紧贴电池&#…...
