Python通过IP地址查询地理位置的几种方法

Written by

in

文章目录
  • 方法 适用场景 精度 速度 依赖 在线API(ipinfo) 快速验证、少量查询 中 中 网络 本地GeoLite2 高频查询、隐私敏感场景 中高 快 本地数据库文件 地图可视化 结果展示、数据分析报告 – – 需经纬度数据 推荐组合: 常规需求:geoip2 + 本地数据库(免费且高效)。 实时性要求低:在线API(避免维护数据库)。 通过上述方法,可灵活实现IP到地理位置的转换,满足安全分析、用户画像等场景需求。 以上就是Python通过IP地址查询地理位置的几种方法的详细内容,更多关于Python IP地址查询地理位置的资料请关注风君子博客其它相关文章! 您可能感兴趣的文章: Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】 使用Python实现IP地址和端口状态检测与监控 Python查询域名的IP地址的实现 Python脚本实现获取IP地址
  • 目录
    • 一、在线API查询(简单快速,依赖网络)
      • 1. 使用 requests + ipinfo.io
      • 2. 使用 requests + ip-api.com
    • 二、本地数据库查询(离线高效,需下载数据库)
      • 1. 使用 geoip2 + GeoLite2 数据库
      • 2. 其他本地库对比
    • 三、结果可视化(增强展示)
      • 使用 folium 生成交互地图
    • 四、方法选择建议

      • 原理:调用免费API返回JSON格式的地理信息(国家、城市、经纬度等)。
      • 代码示例
      import requests
      
      def get_ip_info(ip):
          response = requests.get(f"https://ipinfo.io/{ip}/json")
          if response.status_code == 200:
              data = response.json()
              return {
                  'IP': data.get('ip'),
                  '城市': data.get('city'),
                  '地区': data.get('region'),
                  '国家': data.get('country'),
                  '经纬度': data.get('loc').split(',') if data.get('loc') else None
              }
          return None
      
      print(get_ip_info("66.235.200.109"))  # 示例IP
      
      {'IP': '66.235.200.109', '城市': 'Jacksonville', '地区': 'Florida', '国家': 'US', '经纬度': ['30.2214', '-81.5571']}
      
      • 优点:无需本地数据库,快速部署。
      • 缺点:免费版有请求限制,隐私数据需谨慎。

      • 特点:返回更详细的运营商信息。
      • 代码示例
      response = requests.get(f"http://ip-api.com/json/206.238.237.128")
      data = response.json()
      print(data['country'], data['isp'])  # 国家、运营商
      
      Singapore Tcloudnet
      

      • 原理:加载MaxMind的免费数据库文件(GeoLite2-City.mmdb)。
      • 步骤
        1. 下载数据库:MaxMind官网(需注册)。
        2. 安装库:pip install geoip2uv add geoip2
      • 代码示例
      import geoip2.database
      
      def get_location(ip, db_path='GeoLite2-City.mmdb'):
          try:
              reader = geoip2.database.Reader(db_path)
              response = reader.city(ip)
              return {
                  '国家': response.country.name,
                  '省份': response.subdivisions.most_specific.name,
                  '城市': response.city.name,
                  '经纬度': (response.location.latitude, response.location.longitude)
              }
          except Exception as e:
              return str(e)
      
      print(get_location("61.160.202.122"))  # 国内IP示例
      print(get_location("172.67.182.90"))    # 国外IP示例
      
      {'国家': 'China', '省份': None, '城市': None, '经纬度': (34.7732, 113.722)}
      {'国家': None, '省份': None, '城市': None, '经纬度': (None, None)}
      
      • 优点:离线可用,查询速度快(毫秒级)。
      • 缺点:数据库需定期更新(每月),精确度略低于商业版。

      • pygeoip(仅Python 2)或 ip2geotools(多数据源),但geoip2是当前主流方案。

      • 适用场景:将查询到的经纬度在地图上标记。
      • 代码示例
      import folium
      
      def plot_on_map(lat, lon, city):
          map = folium.Map(location=[lat, lon], zoom_start=10)
          folium.Marker([lat, lon], popup=city).add_to(map)
          map.save("ip_location.html")  # 生成HTML地图
      
      # 结合API或数据库获取经纬度后调用
      lat, lon = 37.4056, -122.0775
      plot_on_map(lat, lon, "California")
      

      方法 适用场景 精度 速度 依赖
      在线API(ipinfo) 快速验证、少量查询 网络
      本地GeoLite2 高频查询、隐私敏感场景 中高 本地数据库文件
      地图可视化 结果展示、数据分析报告 需经纬度数据

      推荐组合

      • 常规需求:geoip2 + 本地数据库(免费且高效)。
      • 实时性要求低:在线API(避免维护数据库)。

      通过上述方法,可灵活实现IP到地理位置的转换,满足安全分析、用户画像等场景需求。

      以上就是Python通过IP地址查询地理位置的几种方法的详细内容,更多关于Python IP地址查询地理位置的资料请关注风君子博客其它相关文章!

      您可能感兴趣的文章:

      • Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
      • 使用Python实现IP地址和端口状态检测与监控
      • Python查询域名的IP地址的实现
      • Python脚本实现获取IP地址

      站内搜索