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()

安装步骤:

  1. 安装ip2region库:pip install ip2region
  2. 下载ip2region.db数据库文件(从项目GitHub releases下载)
  3. 将db文件放在脚本同目录或指定路径

关键点说明:

  • memorySearch()速度最快,适合批量查询
  • 确保db文件路径正确,Win7注意路径中的反斜杠
  • 异常处理很重要,避免单个IP查询失败影响整个批量操作

总结建议: 用memorySearch方法加循环处理就能高效批量查询。


直接下 ipip dat 或者 geolite 的数据转 csv
用个 treemap 或者二分查找 ip 段

不会用 treemap 二分查找法接口慢 数据不准确

回到顶部