python处理IP对应城市省份
IP地理地址库geoip2用法
数据包下载
数据包下载地址(需要注册)
https://www.maxmind.com/en/accounts/258630/geoip/downloads
考虑到注册麻烦,可以到下面这个github的链接去直接下载
https://github.com/Hackl0us/GeoIP2-CN.git
代码
import os
import pprint
import geoip2.database
def query_ip_location(ip_address, locales='zh-CN'):
"""
查询IP地址的地理位置信息
:param ip_address: IP地址
:param locales: 国际化(如果locales不指定的话会默认输出英文我这里指定了中文)
:return: 返回IP信息
"""
#db_path = os.path.dirname(__file__) + '/Country.mmdb'
db_path = r'E:\ghm\加速器\GeoLite2-City.mmdb'
if not os.path.exists(db_path):
raise FileNotFoundError('GeoLite2-City数据库不存在')
try:
with geoip2.database.Reader(db_path, locales=[locales]) as reader:
response = reader.city(ip_address)
location_info = {
'country_name': response.country.name, # 国家名称,中文显示
'country_iso_code': response.country.iso_code, # 国家ISO代码
'province_name': response.subdivisions.most_specific.name, # 省份名称,中文显示
'province_iso_code': response.subdivisions.most_specific.iso_code, # 省份ISO代码
'city_name': response.city.name, # 城市名称,中文显示
'postal_code': response.postal.code, # 邮政编码
'latitude': response.location.latitude, # 纬度
'longitude': response.location.longitude, # 经度
'time_zone': response.location.time_zone, # 时区
'continent_name': response.continent.name, # 大陆名称,中文显示
'continent_code': response.continent.code # 大陆代码
}
return location_info
except Exception as e:
print(f"查询IP地址时发生错误: {e}")
return {}
if __name__ == '__main__':
# 使用示例
ip = '113.68.255.182'
ip_info = query_ip_location(ip)
pprint.pprint(ip_info['province_name']+ip_info['city_name'])
展示结果
这是展示的详细数据: