如何使用 Python 库轻松检索 IP 地理位置

360影视 2025-01-21 08:50 2

摘要:IP 地理定位是指确定与 IP 地址关联的地理位置,例如城市、地区和国家/地区。此信息可用于各种目的,例如分析网站访问者的来源、提供基于位置的服务和防止欺诈。

IP 地理定位是指确定与 IP 地址关联的地理位置,例如城市、地区和国家/地区。此信息可用于各种目的,例如分析网站访问者的来源、提供基于位置的服务和防止欺诈。

要检索 IP 地理位置信息,通常使用两个 API:

ipify:此 API 可帮助您检索请求来源的 IP 地址。ipapi:此 API 提供特定 IP 地址的地理位置信息。

Requests 库可用于与这些 API 进行交互。它是一个简单而强大的 HTTP 客户端库,可以轻松发送和接收 HTTP 请求。

要安装 requests 库,我们可以使用以下 pip 命令:

pIP install requests

如何获取 IP 地址?

要检索 IP 地址,我们可以使用 ipify API。ipify API 的 URL 为 https://api64.ipify.org?format=JSON ,它返回包含 IP 地址的 json 响应。

我们可以使用 requests 库的 get 方法发送 GET 请求,并使用 json 方法解析响应:

import requestsdef get_ip: """ Retrieve the public IP address using the ipify API. Returns: str: The public IP address. Raises: requests.requestException: If the request fails. KeyError: If the expected 'ip' key is not in the response. """ try: response = requests.get('https://api64.ipify.org?format=json', timeout=30) response.raise_for_status # Raise an exception for HTTP errors ip_data = response.json return ip_data.get("ip", "IP address not found") except requests.RequestException as e: raise RuntimeError(f"Failed to retrieve IP address: {e}") except KeyError: raise ValueError("Unexpected response format: missing 'ip' key")

此函数将返回一个表示 IP 地址的字符串。例如,我们可能会得到这样的结果:

>>> get_ip'144.156.210.10'

如何通过 IP 获取位置信息?

要获取位置信息,我们可以使用 ipapi API。API 的 URL 是 https://ipapi.co/{ip}/json/,其中 {ip} 是我们要查询的 IP 地址。它返回一个 JSON 格式的响应,其中包含与 IP 的地理位置相关的各种字段,例如城市、区域和国家/地区等。

我们可以使用 requests 库的 get 方法来发送 GET 请求,并使用 json 方法来解析响应:

import requestsclass IPLocator: """ A class for retrieving geolocation data based on IP addresses. """ @staticmethod def get_ip -> str: """ Retrieves the current device's public IP address. Replace this method with actual implementation if required. """ # Placeholder for IP retrieval return "8.8.8.8" # Example IP @staticmethod def fetch_location(ip_address: str) -> dict: """ Fetches location data for a given IP address using the ipapi service. Args: ip_address (str): The IP address to look up. Returns: dict: A dictionary containing geolocation data. """ try: response = requests.get(f'https://ipapi.co/{ip_address}/json/') response.raise_for_status # Ensure we handle HTTP errors data = response.json return { "ip": ip_address, "city": data.get("city"), "region": data.get("region"), "country": data.get("country_name"), } except requests.RequestException as e: return {"error": f"Unable to fetch location data: {e}"} @classmethod def get_location(cls) -> dict: """ Retrieves the geolocation data of the current device's IP address. Returns: dict: A dictionary containing geolocation data or error information. """ ip_address = cls.get_ip return cls.fetch_location(ip_address)# Example usage:if __name__ == "__main__": location_data = IPLocator.get_location print(location_data)

此函数将返回表示位置信息的字典。例如,我们可能会得到如下结果:

>>> get_location{'ip': '8.8.8.8', 'city': 'Mountain view', 'region': 'California', 'country': 'United States'}

来源:自由坦荡的湖泊AI

相关推荐