Python中如何在Win7系统下使用ip2region批量查询IP归属地?
Win7 怎么使用 Python + ip2region 批量查询 IP 归属地?
根据这个教程 http://blog.51cto.com/wujianwei/2123493
摸索了一天 也搞不懂,教材使用的是 centos 我在 Win 7 上测试
有没有现成的或成品的 Python + ip2region 批量查询 IP 归属地 并且生成 CSV
我在 Win 7 已经搭建了 Python3h 和 JAVA 环境。
ip2region
https://github.com/lionsoul2014/ip2region
Python中如何在Win7系统下使用ip2region批量查询IP归属地?
3 回复
# -*- coding: utf-8 -*-
import os
import sys
from ip2region import ip2region
def batch_ip_query(ip_list, db_path=None):
"""
批量查询IP归属地
Args:
ip_list: IP地址列表
db_path: ip2region数据库文件路径,默认使用自带的db文件
"""
# 1. 初始化搜索器
if db_path is None:
# 获取当前脚本目录下的db文件
current_dir = os.path.dirname(os.path.abspath(__file__))
db_path = os.path.join(current_dir, "ip2region.db")
# 2. 创建搜索器实例
searcher = ip2region.Ip2Region(db_path)
results = []
for ip in ip_list:
try:
# 3. 执行查询(memory算法最快)
data = searcher.memorySearch(ip)
# 4. 解析结果
result = {
'ip': ip,
'country': data.get('country', ''),
'region': data.get('region', ''),
'province': data.get('province', ''),
'city': data.get('city', ''),
'isp': data.get('isp', '')
}
results.append(result)
except Exception as e:
print(f"查询IP {ip} 时出错: {str(e)}")
results.append({'ip': ip, 'error': str(e)})
# 5. 关闭搜索器
searcher.close()
return results
def main():
# 示例IP列表
ip_list = [
"114.114.114.114",
"8.8.8.8",
"202.96.128.86",
"123.125.114.144"
]
print("开始批量查询IP归属地...")
print("-" * 60)
# 执行批量查询
results = batch_ip_query(ip_list)
# 输出结果
for result in results:
if 'error' in result:
print(f"IP: {result['ip']} - 错误: {result['error']}")
else:
print(f"IP: {result['ip']}")
print(f" 国家: {result['country']}")
print(f" 地区: {result['region']}")
print(f" 省份: {result['province']}")
print(f" 城市: {result['city']}")
print(f" ISP: {result['isp']}")
print("-" * 40)
if __name__ == "__main__":
main()
安装步骤:
- 安装ip2region库:
pip install ip2region - 下载ip2region.db数据库文件(从项目GitHub releases下载)
- 将db文件放在脚本同目录或指定路径
关键点说明:
memorySearch()速度最快,适合批量查询- 确保db文件路径正确,Win7注意路径中的反斜杠
- 异常处理很重要,避免单个IP查询失败影响整个批量操作
总结建议: 用memorySearch方法加循环处理就能高效批量查询。
直接下 ipip dat 或者 geolite 的数据转 csv
用个 treemap 或者二分查找 ip 段
不会用 treemap 二分查找法接口慢 数据不准确

