当前位置: 首页 > news >正文

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使用

说明&#xff1a;最近需要在python项目内使用IP定位所在城市的需求&#xff0c;没有采用向外部ISP服务商API请求获取信息的方案&#xff0c;则翻了翻&#xff0c;在搞Java时很多的方案&#xff0c;在Python端反而可选择范围很小。 # 示例查询 ips ["106.38.188.214"…...

Java Stream 流的介绍

介绍 在 Java 8 中&#xff0c;引入了 Stream API&#xff0c;它为处理集合&#xff08;如 List、Set 等&#xff09;提供了一种更简洁、声明式的方式。Stream 流的设计目标是支持对数据集合的高效操作&#xff0c;尤其是能够进行链式操作、并行处理等&#xff0c;极大地提升了…...

C++从入门到入土(八)——多态的原理

目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中&#xff0c;我们介绍了C三大特性之一的多态&#xff0c;我们主要介绍了多态的构成条件&#xff0c;但是对于多态的原理我们探讨的是不够深入的&#xff0c;下面这这一篇文章&#xff0c;我们将…...

BFS,DFS带图详解+蓝桥杯算法题+经典例题

1.BFS和DFS的定义与实现方式 1.1 深度优先搜索&#xff08;DFS&#xff09; 基本概念&#xff1a;DFS 是一种用于遍历或搜索图或树的算法。它从起始节点开始&#xff0c;沿着一条路径尽可能深地探索下去&#xff0c;直到无法继续或者达到目标节点&#xff0c;然后回溯到上一个…...

【RHCE实验】搭建主从DNS、WEB等服务器

目录 需求 环境搭建 配置nfs服务器 配置web服务器 配置主从dns服务器 主dns服务器 从dns服务器 配置客户端 客户端测试 需求 客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容…...

有哪些开源的智慧园区项目?

作为专注于数字孪生技术的开发者团队&#xff0c;我们一直在数字孪生圈分享开源项目。但最近一次与AI助手Deepseek的对话&#xff0c;却让我们“又惊又喜”。 ——当询问“有哪些开源的智慧园区项目”时&#xff0c;Deepseek的回答中竟包含了我们自己的开源项目&#xff01; 这…...

prometheusalert对阿里云短信服务不适配问题处理

背景 想通过prometheusalert实现阿里云短信告警。结果在配置完altermanager和prometheusalert&#xff0c;以及阿里云短信服务中的各种签名和短信模板之后&#xff0c;在prometheusalert web ui上测试模板时一直报“模板变量JSON格式错误 或 JSON变量属性与模板占位符不一致”…...

NFC 碰一碰发视频源码搭建,支持OEM

一、引言 NFC&#xff08;Near Field Communication&#xff09;近场通信技术&#xff0c;以其便捷、快速的数据交互特性&#xff0c;正广泛应用于各个领域。其中&#xff0c;NFC 碰一碰发视频这一应用场景&#xff0c;为用户带来了新颖且高效的视频分享体验。想象一下&#x…...

浅谈鸿蒙跨平台开发框架ArkUI-X

之前写过使用uniapp的跨平台开发鸿蒙项目&#xff0c;今天分享一下开发体验更友好的跨平台开发框架ArkUI-X。 ArkUI-X看起来像是鸿蒙官方的框架&#xff0c;在DevEco中就可以安装和使用&#xff0c;而且会ArkUI就可以开发安卓和、iOS和鸿蒙三个平台的app&#xff0c;下面简单介…...

LLVM学习-- 构建和安装

一 LLVM版本 二 适用预构建的二进制文件安装LLVM 三 适用包管理器安装LLVM 四 从源码构建用于Linux的LLVM 五 从源码构建用于Windows和Visual Studio的LLVM 六 从源码构建用于MacOS 和XCode的LLVM 1.1 LLVM项目从10年前第一次发布到版本3.4&#xff0c;其SVN存储库包含了超过20…...

总结Solidity 的数据类型

数据类型 在 Solidity 中&#xff0c;类型系统非常丰富&#xff0c;主要分为 值类型&#xff08;Value Types&#xff09;和 引用类型&#xff08;Reference Types&#xff09;。此外&#xff0c;还有一些特殊类型和全局变量。 一.值类型 布尔型&#xff08;bool&#xff09…...

C# 中泛型(Generics)‌的核心概念

在 C# 中&#xff0c;‌泛型&#xff08;Generics&#xff09;‌ 是一种强大的编程特性&#xff0c;允许你编写可重用、类型安全的代码&#xff0c;而无需为不同类型重复编写相似的逻辑。泛型的核心思想是‌参数化类型‌&#xff0c;即通过占位符&#xff08;如 T&#xff09;表…...

ubuntu 根据src 包从新打包

下边以onnxruntime示例: 1. 安装必要的依赖 确保你的系统已安装 devscripts、dpkg-dev 和 build-essential&#xff1a; sudo apt update sudo apt install devscripts dpkg-dev build-essential equivs2. 解压源码 进入存放源码包的目录&#xff0c;并解压&#xff1a; #c…...

如何启用 HTTPS 并配置免费的 SSL 证书

引言 HTTPS 已成为现代网站安全性的基础要求。通过 SSL/TLS 证书对数据进行加密&#xff0c;不仅可以保护用户隐私&#xff0c;还能提升搜索引擎排名并增强用户信任。本指南将详细介绍如何通过 Lets Encrypt&#xff08;免费、自动化的证书颁发机构&#xff09;为您的网站启用…...

Python数据与变量、进制转换、输入输出函数、基本运算,基础语法编程练习

第一节 数据与变量 程序 数据 指令 1.1 内置基本数据类型 &#xff08;1&#xff09;数值型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;注意一点Python中int数据可以存储任意大小整数&#xff0c;不会像其他语言&#xff08;C\C Java&#xff0…...

联邦学习(Federated Learning)

1. 概念 联邦学习&#xff08;Federated Learning, FL&#xff09;是一种分布式机器学习技术&#xff0c;它允许多个参与方&#xff08;如设备、机构或企业&#xff09;在不共享原始数据的情况下协同训练机器学习模型。联邦学习通过本地计算模型参数聚合的方式&#xff0c;保护…...

AI大模型核心原理(二)

一、人工智能的兴起。 1、前序。 艾伦麦席森图灵&#xff1b; 是计算机科学之父。 著名英国数学家、计算机科学家、逻辑学家和密码分析学家&#xff0c;被誉为计算机科学与人工智能之父。 阿兰・图灵&#xff08;Alan Turing&#xff09; 是译名&#xff08;简称&#xff09…...

数据结构篇——线索二叉树

一、引入 遍历二叉树是按一定规则将二叉树结点排成线性序列&#xff0c;得到先序、中序或后序序列&#xff0c;本质是对非线性结构线性化&#xff0c;使结点&#xff08;除首尾&#xff09;在线性序列中有唯一前驱和后继&#xff1b;但以二叉链表作存储结构时&#xff0c;只能获…...

【蓝桥杯】742合唱队形(DP LIS)

思路 借这题复习一下LIS&#xff0c;实际上是LIS的升级版&#xff0c;求一个\/形或者/\行&#xff0c;用两次最长上升子串即可。 先从前往后求递增&#xff0c;再从后往前求递减。 先把满足要求的最长队形求出来&#xff0c;总人数减去队形人数就是要出列的数目。 code impo…...

MySQL二进制日志格式有哪几种

目录 一、二进制日志格式类型1. **STATEMENT 格式(SBR: Statement-Based Replication)**2. **ROW 格式(RBR: Row-Based Replication)**3. **MIXED 格式(混合模式)**二、二进制日志事件详解三、如何选择二进制日志格式?四、配置与查看二进制日志格式五、注意事项在 MySQL…...

VUE管理后台开发-vue-element-admin

# 克隆项目 git clone https://github.com/PanJiaChen/vue-element-admin.git # 进入项目目录 cd vue-element-admin # 安装依赖 npm install # 速度过慢可以使用下面方法进行指定下载镜像原 # 也可以使用nrm选择下载镜像原 # 建议不要用 cnpm 安装 会有各种诡异的bug 可以通…...

计算机网络原理

网络发展史 起初,计算机之间是相互独立的,分别完成不同的工作,效率较为低下.随着时代的发展,计算机开始协同完成任务,就有了网络互连.网络互连是指将多台计算机连接在一起,完成数据共享.根据网络互联的规模不同,可以划分为局域网和广域网.局域网,简称LAN.局域网内的主机可以互相…...

速盾:如何利用CDN静态加速匹配尾缀提升网站性能?

在当前数字化时代&#xff0c;网站性能对于用户体验至关重要。尤其是对于包含大量静态资源&#xff08;如图片、CSS、JavaScript文件等&#xff09;的网站来说&#xff0c;如何高效地管理和加速这些资源成为了一个重要课题。本文将介绍如何利用CDN静态加速匹配尾缀的方法来提升…...

【H2O2 | 软件开发】前端深拷贝的实现

目录 前言 开篇语 准备工作 正文 概述 JSON方法 递归 其他 结束语 前言 开篇语 本系列为短篇&#xff0c;每次讲述少量知识点&#xff0c;无需一次性灌输太多的新知识点。该主题文章主要是围绕前端、全栈开发相关面试常见问题撰写的&#xff0c;希望对诸位有所帮助。…...

C#语法基础总结

输入和输出 输入 Console.Read(); 从屏幕读取一个字符&#xff0c;并返回该字符所对应的整型数字 Console.ReadLine(); 从屏幕读取一串字符&#xff0c;并返回该字符串 输出 Console.WriteLine(); 输出内容&#xff0c;并换行 Console.Write(); 输出内容&#xff0c;不换行…...

《深度学习》—— 模型部署

文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境&#xff0c;使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…...

E902基于bash与VCS的仿真环境建立

网上看见很多E902仿真的文章&#xff0c;但用到的编译器是类似于这种Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120&#xff0c;而我按照相应的步骤与对应的编译器&#xff0c;仿真总会报错。后面将编译器换成riscv64-elf-x86_64-20210512&#xff0c;反而成功了。现在开…...

挖矿------获取以太坊测试币

文章目录 挖矿------获取以太坊测试币通过水龙头获取以太坊测试币了解Sepolia是什么&#xff1f;水龙头&#xff08;Faucet&#xff09;是什么&#xff1f;Gitcoin Passport是什么&#xff1f; 操作1.MetaMask钱包2.将MetaMask切换到Sepolia测试网络3.用MetaMask连接Gitcoin Pa…...

MySQL事务详解:从理论到实践,保障数据一致性

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么需要事务&#xff1f;二、事务的四大特性&#xff08;ACID&#xff09;三、MySQL事务的使用方法1. 基本语法2. 自动提交的设置3. 保存点&#xff08;…...

在家用台式机上部署 DeepSeek-R1:低成本高性能的 CPU 推理方案---不到 4 万元

近年来,随着大模型技术的飞速发展,开源模型如 DeepSeek-R1 的出现为技术爱好者提供了更多探索人工智能的机会。然而,这类模型动辄数百亿参数,传统意义上需要昂贵的 GPU 集群才能运行,让许多个人开发者望而却步。最近,腾讯玄武实验室基于 CPU 的硬件方案优化,成功将 Deep…...

神经网络量化3-全连接层实现量化

本节&#xff0c;我们模拟下全连接层实现量化&#xff0c;原理上为了方便计算&#xff0c;全连接矩阵采用动态量化的方法&#xff0c;而输入由于不断在变化&#xff0c;我们采用静态量化的方法&#xff0c;直接给出代码&#xff1a; import torch import numpy as np import m…...

12 File文件对象:创建、获取基本信息、遍历文件夹、查找文件;字符集的编解码 (黑马Java视频笔记)

文章目录 File >> 存储数据的方案1. 认识File2. File操作2.1 创建File对象2.2 File操作1&#xff09;对文件对象的信息的操作2&#xff09;文件/文件夹的创建/删除3&#xff09;⭐⭐对文件夹的遍历 3. 方法递归3.1 认识递归3.2 递归算法及其执行流程1) 案例&#xff1a;2…...

【软件工程】03_软件需求分析

3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …...

词向量+位置编码=语义+语序?Transformer如何让相加操作不丢失原意?

在Transformer模型中&#xff0c;词向量&#xff08;Token Embedding&#xff09;和位置编码&#xff08;Position Encoding&#xff09;通过相加的方式结合&#xff0c;而模型能够同时保留词本身的语义信息和位置信息&#xff0c;这主要得益于以下机制&#xff1a; 为什么相加…...

Spring(7)——MyBatis入门(1)

一、MyBatis入门 1.1 什么是MyBatis MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 1.2 如何操作MyBatis 在application.properties进行配置 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasou…...

C语言文件操作入门

本节重点 理解文件的形式与基本概念二进制文件与文本文件文件的打开与关闭文件读写函数、文件缓冲区 正文开始--------------------------------------------------------------------------------------------------------------------- 一、为什么使用文件 程序运行时数据存…...

Java返回多个参数的方法

背景 在写代码的过程中&#xff0c;因有一些复杂的业务逻辑&#xff0c;需要返回多个结果。比如&#xff1a;需要增加一个true或者false&#xff0c;另外在加一个真正的结果值这样的类型。可能会有人用到数组以及Map等作为结果返回&#xff0c;当然这样确实是可以完成这样的功…...

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…...

Java基础关键_023_IO流(一)

目 录 一、概述 二、分类 1.根据数据流向 2.根据读写数据形式 3.根据流在 IO 操作中的作用和实现方式 三、FileInputStream 1.说明 2.常用方法 &#xff08;1&#xff09;read() &#xff08;2&#xff09;read(byte[] b) &#xff08;3&#xff09;read(byte[] b, …...

Lora 中 怎么 实现 矩阵压缩

Lora 中 怎么 实现 矩阵压缩 1. 导入必要的库 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft...

lombok不起作用

xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency> - **作用**&#xff1a;引入 L…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表&#xff08;集群健康检查、ILM管理、故障诊断&#xff09;一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...

探讨Deveco Studio常见问题及解决方案,分享快速排障方法

以下是针对 DevEco Studio 开发工具的常见问题、解决方案及快速排障方法&#xff0c;覆盖环境配置、编译运行、调试等多个环节&#xff0c;助您高效解决开发中的“拦路虎”。 一、环境配置问题 1. 安装失败或卡顿 现象&#xff1a; 安装时进度条卡住&#xff0c;或提示“Faile…...

Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则

目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...

RISCV虚拟化环境搭建

概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境&#xff0c;通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest&#xff0c;学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是串的值&#xff0c; a i a_i a…...

vue3 elementUi table自由渲染组件

文章目录 前言CustomTable如何使用tableColumn 属性h函数创建原生元素创建组件动态生成 前言 elementui中的table组件&#xff0c;表格中想要自由地渲染内容&#xff0c;是一种比较麻烦的事情&#xff0c;比如你表格中想要某一列插入一个button按钮&#xff0c;是不是要用插槽…...

Centos离线安装gcc

文章目录 Centos离线安装gcc1. gcc是什么&#xff1f;2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 项目下的开源编译器套件&#xff0c;主要用于将 C、C 等编程语言的源…...

odbus TCP转Modbus RTU网关快速配置案例

Modbus TCP 转Modbus RTU网关快速配置案例 在工业自动化领域&#xff0c;Modbus 协议以其简洁和高效而著称&#xff0c;成为众多设备通信的首选。 随着技术的发展和应用场景的变化&#xff0c;Modbus 协议也发展出了不同的版本&#xff0c;其中 Modbus TCP 和 Modbus RTU 是两种…...

Unity3D开发AI桌面精灵/宠物系列 【一】 窗口透明化 背景剔除 、去边框、去Logo动画UI正常显示

Unity3D 交互式AI桌面宠物开发系列【一】 文章主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲初期一些设置和部署。…...