下面我来详细讲解一下"Python实现查询IP地址所在地"的完整攻略.主要分为以下几个步骤:
我们需要一个可以提供IP地址所在地数据的第三方数据源.常见的数据源有淘宝IP地址库、纯真IP地址库等.以淘宝IP地址库为例,在 https://ip.taobao.com/ 找到"API文档",我们可以看到提供的查询API地址是:
http://ip.taobao.com/service/getIpInfo.php?ip=
我们只需要将其中的部分替换成要查询的IP地址即可得到所在地信息.
在Python中,我们可以通过socket模块获取当前机器的IP地址,示例代码如下:
import socket
ip = socket.gethostbyname(socket.gethostname())
print(ip)
如果要获取指定域名的IP地址,代码如下:
import socket
ip = socket.gethostbyname('www.baidu.com')
print(ip)
我们使用requests模块发送HTTP请求,并将返回的JSON数据转换为Python的字典数据类型,示例代码如下:
import requests
ip = '202.10⑧22.5' # 要查询的IP地址
url = f'http://ip.taobao.com/service/getIpInfo.php?ip={ip}'
resp = requests.get(url) # 发送HTTP请求
data = resp.json() # 将返回的JSON数据转换为Python的字典数据类型
print(data)
我们将返回的JSON数据转换为Python的字典数据类型后,就可以根据字典中的键值获取所需的信息了:
import requests
ip = '202.10⑧22.5' # 要查询的IP地址
url = f'http://ip.taobao.com/service/getIpInfo.php?ip={ip}'
resp = requests.get(url) # 发送HTTP请求
data = resp.json() # 将返回的JSON数据转换为Python的字典数据类型
province = data['data']['region']
city = data['data']['city']
isp = data['data']['isp']
print(f'{isp} {province} {city}')
这样我们就可以输出所查询的IP地址所在地的省份、城市和服务商了.以上代码,只需要将要查询的IP地址赋值给ip变量即可查询.
现在,我们已经掌握了查询IP地址所在地的完整攻略,我们使用前面的代码分别查询淘宝网的IP地址和百度的IP地址,示例代码如下:
import requests
# 查询淘宝网服务器的IP地址
ip = '121.4③9⑥86'
url = f'http://ip.taobao.com/service/getIpInfo.php?ip={ip}'
resp = requests.get(url)
data = resp.json()
province = data['data']['region']
city = data['data']['city']
isp = data['data']['isp']
print(f'{ip} {isp} {province} {city}')
# 查询百度的IP地址
ip = '220.181.3⑧148'
url = f'http://ip.taobao.com/service/getIpInfo.php?ip={ip}'
resp = requests.get(url)
data = resp.json()
province = data['data']['region']
city = data['data']['city']
isp = data['data']['isp']
print(f'{ip} {isp} {province} {city}')
输出结果分别为:
121.4③9⑥86 阿里云 中国 浙江杭州
220.181.3⑧148 联通 中国 北京