📜  python 从 IP 获取城市名称 - Python (1)

📅  最后修改于: 2023-12-03 15:19:06.884000             🧑  作者: Mango

Python 从 IP 获取城市名称

在我们开发一些基于地理位置的应用时,通常需要获取用户的位置信息来提供更加个性化的服务。而获取用户位置最常用的方式就是通过 IP 地址获取其所在的城市信息。

Python 作为一种高效易用的编程语言,提供了多种获取 IP 地址和城市信息的方式。下面将为大家介绍一些常用的方法。

1. IP-API.com API

IP-API.com 是一个提供免费 IP 地址查询服务的网站,我们可以通过它的 API 接口获取 IP 地址的相关信息。在使用前需要先注册账号并获取 API_KEY。

import requests

def get_city_by_ip(ip):
    url = 'http://ip-api.com/json/{}?lang=zh-CN&fields=city'.format(ip)
    response = requests.get(url)
    city = response.json()['city']
    return city

使用时只需要传入 IP 地址即可获取城市名称。需要注意的是,该 API 接口限制每个用户每分钟最多进行 150 次查询,需要合理使用。

2. GeoIP2 库

GeoIP2 库是一个常用的 Python 库,可以根据 IP 地址获取相应的城市、地理位置等信息。使用前需要安装相关的 GeoIP2 数据库和库文件。

import geoip2.database

def get_city_by_ip(ip):
    reader = geoip2.database.Reader('path/to/GeoLite2-City.mmdb')
    response = reader.city(ip)
    city = response.city.name
    return city

在该示例中使用了本地安装的 GeoLite2-City 数据库文件。使用该方法需要注意库文件的更新和路径设置。

3. ip2region 库

ip2region 是一个基于纯真 IP 数据库的高性能 IP 地址定位库,可以快速准确地获取 IP 地址所在的位置信息。

import os
import ip2region

def get_city_by_ip(ip):
    db_file = os.path.abspath('path/to/ip2region.db')
    ipdb = ip2region.IP2Region(db_file)
    result = ipdb.binarySearch(ip)
    city = result['region'].split('|')[2]
    return city

使用该方法需要提前下载纯真 IP 数据库文件并将其转换为 ip2region 库所需的格式。该库在定位速度和准确度上都有较好的表现,但需要注意定期更新数据库文件。

以上介绍了几种常用的 Python 获取 IP 地址位置信息的方法,使用前需要根据实际情况选择合适的方式。