当前位置: 代码网 > it编程>前端脚本>Python > Python通过IP地址查询地理位置的几种方法

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

2025年09月25日 Python 我要评论
一、在线api查询(简单快速,依赖网络)1. 使用 requests + ipinfo.io原理:调用免费api返回json格式的地理信息(国家、城市、经纬度等)。代码示例:import reques

一、在线api查询(简单快速,依赖网络)

1. 使用 requests + ipinfo.io

  • 原理:调用免费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']}
  • 优点:无需本地数据库,快速部署。
  • 缺点:免费版有请求限制,隐私数据需谨慎。

2. 使用 requests + ip-api.com

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

二、本地数据库查询(离线高效,需下载数据库)

1. 使用 geoip2 + geolite2 数据库

  • 原理:加载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)}
  • 优点:离线可用,查询速度快(毫秒级)。
  • 缺点:数据库需定期更新(每月),精确度略低于商业版。

2. 其他本地库对比

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

三、结果可视化(增强展示)

使用 folium 生成交互地图

  • 适用场景:将查询到的经纬度在地图上标记。
  • 代码示例
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地址查询地理位置的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com