Получить геоданные на Python

Python предоставляет множество библиотек и инструментов для работы с геоданными. В этой статье мы рассмотрим основные библиотеки, которые помогут вам получить геоданные, а также пример их использования.

Вариант 1:
import requests

'''
pip install requests

http://ipwho.is/
https://ipapi.co/json/
'''

def geodata(ip=''):
    if ip:
        public_ip = '/' + ip
    else:
        public_ip = ''
    r = requests.get(f'http://ip-api.com/json{public_ip}?fields=66846719&lang=ru')
    return r.json()
    
data = geodata()

print('Continent:', data['continent'], '[' + data['continentCode'] + ']')
print('Country:', data['country'], '[' + data['countryCode'] + ']')
print('Region:', data['regionName'])
print('City:', data['city'])
print('IP:', data['query'])
print('Latitude:', data['lat'])
print('Longitude:', data['lon'])
print('Timezone:', data['timezone'])
print('Currency:', data['currency'])
print('Provider:', data['as'], '[' + data['asname'] + ']')
Вариант 2:

pysxgeo — это библиотека Python для работы с базами данных GeoIP, аналогично библиотеке geoip2, но с акцентом на производительность и простоту использования. В этой статье мы рассмотрим, как использовать pysxgeo для получения геоданных.

from pysxgeo import sxgeo
import socket, requests

'''
pip install pysxgeo requests

https://sypexgeo.net/ru/download/
'''

def geodata(ip=''):
    if ip:
        public_ip = ip
    else:
        response = requests.get('https://api.ipify.org?format=json')
        public_ip = response.json()['ip']
    info = sxgeo.SxGeo(db_file='SxGeoCity.dat', mode=sxgeo.SXGEO_BATCH)
    return public_ip, info.get_city(public_ip, full=True)

public_ip, data = geodata()
print('Country:', data['country']['name_ru'], '[' + data['country']['iso'] + ']')
print('Region:', data['region']['name_ru'])
print('City:', data['city']['name_ru'])
print('Public IP:', public_ip)
print('Latitude:', data['city']['lat'])
print('Longitude:', data['city']['lon'])
Вариант 3:

MaxMind - предоставляет мощные инструменты для работы с геолокацией, включая базу данных GeoIP и API для точного определения местоположения по IP-адресам. В этой статье мы рассмотрим, как использовать MaxMind с Python для получения геоданных.

import geoip2.database
import requests

'''
pip install geoip2 requests

https://www.maxmind.com/
'''

def geodata(ip=''):
    output = {}
    if ip:
        public_ip = ip
    else:
        response = requests.get('https://api.ipify.org?format=json')
        public_ip = response.json()['ip']

    with geoip2.database.Reader('GeoLite2-City.mmdb') as reader:
        response = reader.city(public_ip)
        
        output['continentCode'] = response.continent.code
        output['continent'] = response.continent.names['ru']
        output['countryCode'] = response.country.iso_code
        output['country'] = response.country.names['ru']
        output['regionName'] = response.subdivisions[0].names['ru']
        output['city'] = response.city.names['ru']
        output['lat'] = str(response.location.latitude)
        output['lon'] = str(response.location.longitude)
        output['timezone'] = response.location.time_zone
        output['accuracyRadius'] = str(response.location.accuracy_radius)
        output['query'] = str(response.traits.ip_address)
    return output

data = geodata()

print('Continent:', data['continent'], '[' + data['continentCode'] + ']')
print('Country:', data['country'], '[' + data['countryCode'] + ']')
print('Region:', data['regionName'])
print('City:', data['city'])
print('IP:', data['query'])
print('Latitude:', data['lat'])
print('Longitude:', data['lon'])
print('Timezone:', data['timezone'])
print('Accuracy radius:', data['accuracyRadius'])

Заключение

Python предоставляет множество инструментов для работы с геоданными, от простого геокодирования до сложного анализа геометрических объектов и визуализации данных. Используя библиотеки, такие как Geopy, Geopandas, Shapely и Folium, вы можете легко интегрировать геоданные в свои проекты и создавать мощные приложения.
Поделится:
Комментарии (0)
IP-адрес: 3.235.182.206
Часовой пояс: Asia/Almaty
Подробнее

Сервисы

Страницы

Информация