Python通過IP地址查詢地理位置的幾種方法
一、在線API查詢(簡單快速,依賴網(wǎng)絡(luò))
1. 使用 requests + ipinfo.io
- 原理:調(diào)用免費(fèi)API返回JSON格式的地理信息(國家、城市、經(jīng)緯度等)。
- 代碼示例:
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'),
'地區(qū)': data.get('region'),
'國家': data.get('country'),
'經(jīng)緯度': 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', '地區(qū)': 'Florida', '國家': 'US', '經(jīng)緯度': ['30.2214', '-81.5571']}
- 優(yōu)點(diǎn):無需本地?cái)?shù)據(jù)庫,快速部署。
- 缺點(diǎn):免費(fèi)版有請求限制,隱私數(shù)據(jù)需謹(jǐn)慎。
2. 使用 requests + ip-api.com
- 特點(diǎn):返回更詳細(xì)的運(yùn)營商信息。
- 代碼示例:
response = requests.get(f"http://ip-api.com/json/206.238.237.128") data = response.json() print(data['country'], data['isp']) # 國家、運(yùn)營商
Singapore Tcloudnet
二、本地?cái)?shù)據(jù)庫查詢(離線高效,需下載數(shù)據(jù)庫)
1. 使用 geoip2 + GeoLite2 數(shù)據(jù)庫
- 原理:加載MaxMind的免費(fèi)數(shù)據(jù)庫文件(
GeoLite2-City.mmdb)。 - 步驟:
- 下載數(shù)據(jù)庫:MaxMind官網(wǎng)(需注冊)。
- 安裝庫:
pip install geoip2或uv 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,
'經(jīng)緯度': (response.location.latitude, response.location.longitude)
}
except Exception as e:
return str(e)
print(get_location("61.160.202.122")) # 國內(nèi)IP示例
print(get_location("172.67.182.90")) # 國外IP示例
{'國家': 'China', '省份': None, '城市': None, '經(jīng)緯度': (34.7732, 113.722)}
{'國家': None, '省份': None, '城市': None, '經(jīng)緯度': (None, None)}
- 優(yōu)點(diǎn):離線可用,查詢速度快(毫秒級)。
- 缺點(diǎn):數(shù)據(jù)庫需定期更新(每月),精確度略低于商業(yè)版。
2. 其他本地庫對比
pygeoip(僅Python 2)或ip2geotools(多數(shù)據(jù)源),但geoip2是當(dāng)前主流方案。
三、結(jié)果可視化(增強(qiáng)展示)
使用 folium 生成交互地圖
- 適用場景:將查詢到的經(jīng)緯度在地圖上標(biāo)記。
- 代碼示例:
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地圖
# 結(jié)合API或數(shù)據(jù)庫獲取經(jīng)緯度后調(diào)用
lat, lon = 37.4056, -122.0775
plot_on_map(lat, lon, "California")

四、方法選擇建議
| 方法 | 適用場景 | 精度 | 速度 | 依賴 |
|---|---|---|---|---|
| 在線API(ipinfo) | 快速驗(yàn)證、少量查詢 | 中 | 中 | 網(wǎng)絡(luò) |
| 本地GeoLite2 | 高頻查詢、隱私敏感場景 | 中高 | 快 | 本地?cái)?shù)據(jù)庫文件 |
| 地圖可視化 | 結(jié)果展示、數(shù)據(jù)分析報(bào)告 | - | - | 需經(jīng)緯度數(shù)據(jù) |
推薦組合:
- 常規(guī)需求:geoip2 + 本地?cái)?shù)據(jù)庫(免費(fèi)且高效)。
- 實(shí)時(shí)性要求低:在線API(避免維護(hù)數(shù)據(jù)庫)。
通過上述方法,可靈活實(shí)現(xiàn)IP到地理位置的轉(zhuǎn)換,滿足安全分析、用戶畫像等場景需求。
以上就是Python通過IP地址查詢地理位置的幾種方法的詳細(xì)內(nèi)容,更多關(guān)于Python IP地址查詢地理位置的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python中的scapy抓取http報(bào)文內(nèi)容
這篇文章主要介紹了python中的scapy抓取http報(bào)文內(nèi)容方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
使用PyInstaller將python轉(zhuǎn)成可執(zhí)行文件exe筆記
這篇文章主要介紹了使用PyInstaller將python轉(zhuǎn)成可執(zhí)行文件exe筆記,需要的朋友可以參考下2018-05-05
Python實(shí)現(xiàn)微信中找回好友、群聊用戶撤回的消息功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)微信中找回好友、群聊用戶撤回的消息功能,結(jié)合實(shí)例形式分析了Python基于微信itchat模塊實(shí)現(xiàn)針對撤回消息的查看功能相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
DataFrame:通過SparkSql將scala類轉(zhuǎn)為DataFrame的方法
今天小編就為大家分享一篇DataFrame:通過SparkSql將scala類轉(zhuǎn)為DataFrame的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python使用socketServer包搭建簡易服務(wù)器過程詳解
這篇文章主要介紹了Python使用socketServer包搭建簡易服務(wù)器過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Tensorflow卷積神經(jīng)網(wǎng)絡(luò)實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

