Cómo utilizar la librería geoip de python

12/01/2008

La librería GeoIP2 de Python permite obtener información geográfica a partir de una dirección IP. Esta información te mostrará cómo instalarla, usarla con servicios web y bases de datos, manejar excepciones y comprender los datos retornados. Aprenderás a geolocalizar IPs para obtener información como país, ciudad, coordenadas, y más.

Temario

Instalación de GeoIP2

El primer paso es instalar la librería GeoIP2 usando pip:

$ pip install geoip2

Si no puedes usar pip, puedes usar easy_install:

$ easy_install .

Para utilizar la extensión C para el lector de base de datos, debes instalar la API C libmaxminddb. Consulta las instrucciones que vienen con ella.

Uso del Servicio Web GeoIP2

El servicio web ofrece una forma eficiente de obtener información geográfica. Necesitas una cuenta de MaxMind con un account_idy una license_key.

Ejemplo con el servicio web (sincrónico):

>>> import geoipwebservice>>> with geoipwebservice.Client(42, 'license_key') as client:>>> response = client.city('200.110')>>> print(response.country.name) # United States>>> print(response.city.name) # Minneapolis

Recuerda reemplazar 42con tu account_idy 'license_key'con tu license_key. Puedes usar geolite.infocomo hostpara el servicio GeoLite2 o sandbox.maxmind.compara el entorno de pruebas.

Ejemplo con el servicio web (asíncrono):

Para usar el servicio web de forma asíncrona, se utiliza geoipwebservice.AsyncClient. Esto es útil para aplicaciones que manejan múltiples peticiones simultáneas. El código es similar al ejemplo sincrónico, pero se utiliza awaitpara esperar la respuesta:

>>> import asyncio>>> import geoipwebservice>>> async def main():>>> async with geoipwebservice.AsyncClient(42, 'license_key') as client:>>> response = await client.city('200.110')>>> print(response.country.name)>>> asyncio.run(main())

Excepciones del servicio web:

El servicio web puede devolver diferentes excepciones, incluyendo AddressNotFoundError, AuthenticationError, InvalidRequestError, OutOfQueriesError, y HTTPError. Es importante manejar estas excepciones para evitar fallos en tu aplicación.

Uso de la Base de Datos GeoIP2

Otra opción es usar bases de datos GeoIP2 descargables. Necesitas descargar la base de datos (ej: GeoLite2-City.mmdb) y especificar su ruta.

Ejemplo con la base de datos:

>>> import geoipdatabase>>> with geoipdatabase.Reader('/path/to/GeoLite2-City.mmdb') as reader:>>> response = reader.city('200.110')>>> print(response.country.name) # United States>>> print(response.city.name) # Minneapolis

Recuerda reemplazar '/path/to/GeoLite2-City.mmdb'con la ruta a tu base de datos. Existen diferentes bases de datos (City, Country, ASN, etc.) cada una con información diferente.

Excepciones de la base de datos:

Las excepciones comunes incluyen FileNotFoundError, PermissionError, ValueError, y maxminddb.InvalidDatabaseError. AddressNotFoundErrorse lanza si la IP no se encuentra en la base de datos.

Tipos de Bases de Datos GeoIP2

MaxMind ofrece diferentes bases de datos, cada una con un nivel de detalle diferente:

  • GeoLite2-City: Información detallada de ciudad, incluyendo coordenadas.
  • GeoLite2-Country: Información básica de país.
  • GeoLite2-ASN: Información sobre el Autonomous System Number (ASN) del proveedor de internet.
  • GeoLite2-Connection-Type: Tipo de conexión (ej: corporativo, residencial).
  • GeoLite2-Domain: Dominio asociado a la IP.
  • GeoLite2-Enterprise: Información más precisa y completa (requiere suscripción).
  • GeoLite2-ISP: Proveedor de internet.
  • GeoLite2-Anonymous-IP: Detecta si la IP es anónima (VPN, proxy, TOR).

Comparativa de Métodos

Método Fuente de Datos Precisión Costo
Servicio Web MaxMind Alta Pago (GeoIP2), Gratuito (GeoLite2)
Base de Datos Archivo local Depende de la base de datos Pago (bases de datos completas), Gratuito (GeoLite2)

Manejo de Errores

Es crucial manejar las excepciones para que tu aplicación no falle. Utiliza bloques try...exceptpara capturar y gestionar los errores:

try: with geoipdatabase.Reader('/path/to/GeoLite2-City.mmdb') as reader: response = reader.city('4')except geoiperrors.AddressNotFoundError as e: print(f"Dirección IP no encontrada: {e}")except Exception as e: print(f"Ocurrió un error: {e}")

Interpretación de los Datos

Los objetos devueltos por las funciones de GeoIP2 contienen mucha información. Los atributos más comunes son:

  • country.name : Nombre del país.
  • country.iso_code : Código ISO del país.
  • city.name : Nombre de la ciudad.
  • location.latitude : Latitud.
  • location.longitude : Longitud.
  • postal.code : Código postal.
  • traits.is_anonymous : Indica si la IP es anónima.

Recuerda consultar la documentación oficial de GeoIP2 para una lista completa de los atributos disponibles en cada tipo de base de datos o servicio web.

Consultas Habituales y Solución de Problemas

Aquí hay algunas consultas habituales y sus soluciones:

¿Cómo obtener solo el país?

Utilizando la base de datos GeoLite2-Country o el método countrydel servicio web, se obtiene solo la información del país.

¿Cómo manejar IPs inválidas?

Envolver el código en un bloque try...exceptpara capturar la excepción ValueErrorque se lanza si la IP es inválida.

¿Por qué obtengo una excepción AddressNotFoundError?

Esto significa que la IP no se encuentra en la base de datos. Asegúrate de tener la base de datos correcta y actualizada. También puede ocurrir si usas el servicio web y has agotado tu cuota de consultas.

¿Cómo trabajar con diferentes bases de datos?

MaxMind ofrece varias bases de datos. Selecciona la que mejor se adapte a tus necesidades, teniendo en cuenta la precisión y el costo.

¿Cómo integrar GeoIP2 con otras librerías?

Puedes integrar GeoIP2 con otras librerías de Python para crear aplicaciones más complejas, por ejemplo, para visualizar datos en un mapa o para análisis de datos.

Consideraciones Finales

La librería GeoIP2 de Python es una herramienta poderosa para geolocalizar direcciones IP. Recuerda que la precisión de la geolocalización puede variar dependiendo de la fuente de datos y la calidad de la información disponible. Siempre es buena práctica manejar las excepciones apropiadamente y consultar la documentación para aprovechar al máximo las capacidades de esta librería.

Si quieres conocer otros artículos parecidos a Cómo utilizar la librería geoip de python puedes visitar la categoría Libros y Librerías.

Subir