python之获取指定IP的地理位置详解

获取ip地理位置的API接口

本来是想通过这个案例练习下正则表达式的,后来才发现有更简单的方法, 当然是网上有很多API接口, 直接可以返回json格式的数据, 通过处理, easy搞定……

根据IP查询所在地、运营商等信息的一些API如下:
1. 淘宝的API(推荐):http://ip.taobao.com/service/getIpInfo.php?ip=110.84.0.129
2. 国外freegeoip.net(推荐):http://freegeoip.net/json/110.84.0.129 这个还提供了经纬度信息(但不一定准)
3. 新浪的API:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=110.84.0.129
4. 腾讯的网页查询(返回的非json格式): http://ip.qq.com/cgi-bin/searchip?searchip1=110.84.0.129
5. ip.cn的网页(返回的非json格式):http://www.ip.cn/index.php?ip=110.84.0.129
6. ip-api.com: http://ip-api.com/json/110.84.0.129

上述的API接口,大多有一个特点是, 返回的直接是个json格式;

案例代码

此处以freegeoip.net的API为例,编写代码如下:

  • 优势:
    • 可以查看经纬度;
  • 缺点:
    • 不能定位到省份,建议需要省份的使用其他API;
#!/usr/bin/env pyhton
# coding:utf-8

"""
@Name: re_01_ip_location.py
@Author: lvah
@Date:1/11/18
@Connect: [email protected]
@Desc:

    根据API查询IP的地理位置
"""

import urllib2
import json

ipaddr = raw_input("查询的IP:")

# 组成查询ip地理位置的网址;
url = 'http://freegeoip.net/json/%s' % (ipaddr)

# 访问url地址, urlobject是对象;
urlobject = urllib2.urlopen(url)

# url地址访问后的返回值;urlcontent类型为字符串;
# urlcontent = '{
#   "ip":"172.25.254.250","country_code":"","country_name":"",
#   "region_code":"","region_name":"","city":"","zip_code":"",
#   "time_zone":"","latitude":0,"longitude":0,"metro_code":0
#   }'
# latitude: 纬度
# longitude: 经度
urlcontent = urlobject.read()

# 很明显字符串的信息不好处理的, 那么json模块可以帮忙的;
res = json.loads(urlcontent)

# print res

# 显示查询结果
print """
                    查询结果如下:

        IP: {}
        时区: {}
        所在国家: {}
        所在经度: {}
        所在纬度: {}

""".format(res['ip'], res['time_zone'], res['country_name'], res['latitude'], res['longitude'])



  • 执行结果如下:

查询的IP:123.1.2.3

                    查询结果如下:

        IP: 123.1.2.3
        时区: Asia/Tokyo
        所在国家: Japan
        所在经度: 35.1802
        所在纬度: 136.9067

参考的博客链接:python 开发中根据IP查地理位置信息方法教程
参考的博客链接(测试后不可用,但提供了思路):python实现查询IP地址所在地

你可能感兴趣的:(python基础系列)