Python获取IP的地理位置:经纬度,国家,区域,城市

人人可以学Python .png

我们现在手机使用的定位主要是以GPS卫星为主,A-Gps,IP辅助定位。而网站还是通过浏览网页用户的IP来得到用户的地理位置,通过分析,调整业务。
GeoIP2
很多公司都是使用Maxmind网站的IP信息库,里面包含着IP的详细信息,有付费的也有免费的,收费与免费的区别就是精准度和覆盖率
GeoIP也有python的lib,有GeoIP,和GeoIP2,在这里我们就拿GeoIP2来试一试获取一个IP的地理位置。

GeoIP2安装###

安装GeoIP2还是一样:
命令安装:

pip install geoip2

也可以去Github网站下载安装

地址:https://github.com/maxmind/GeoIP2-python

GeoIP2使用###

使用我们刚才安装的包,我们可以使用Maxmind的在线库也可以把库下载下来离线使用。
先来看看离线库的使用:

先去这里下载一个库

http://dev.maxmind.com/geoip/geoip2/geolite2 
人人可以I学Python2.jpg

我这里就下载个GeoLite2 City使用。

然后我们的python代码如下:

#!/usr/bin/python
#-*-coding:utf-8-*-
import geoip2.database
reader = geoip2.database.Reader('./GeoLite2-City.mmdb')
ip = raw_input("输入你要查询的IP:\n")
response = reader.city(ip)
# 有多种语言,我们这里主要输出英文和中文
print("你查询的IP的地理位置是:")

print("地区:{}({})".format(response.continent.names["es"],
                                       response.continent.names["zh-CN"]))

print("国家:{}({}) ,简称:{}".format(response.country.name,
                                                        response.country.names["zh-CN"],
                                                        response.country.iso_code))

print("洲/省:{}({})".format(response.subdivisions.most_specific.name,
                                          response.subdivisions.most_specific.names["zh-CN"]))

print("城市:{}({})".format(response.city.name, 
                                          response.city.names["zh-CN"]))

print("经度:{},纬度{}".format(response.location.longitude,
                                            response.location.latitude))

print("时区:{}".format(response.location.time_zone))

print("邮编:{}".format(response.postal.code))

试一试

(venv) allenwoo@~/renren/code$ python test.py 
输入你要查询的IP:
112.74.207.96
你查询的IP的地理位置是:
地区:Asia(亚洲)
国家:China(中国) ,简称:CN
洲/省:Zhejiang(浙江省)
城市:Hangzhou(杭州)
经度:120.1614,纬度30.2936
时区:Asia/Shanghai
邮编:None

再来一个:

(venv) allenwoo@~/renren/code$ python test.py 
输入你要查询的IP:
223.192.2.165
你查询的IP的地理位置是:
地区:Asia(亚洲)
国家:China(中国) ,简称:CN
洲/省:Beijing(北京市)
城市:Beijing(北京)
经度:116.3883,纬度39.9289
时区:Asia/Shanghai
邮编:None

2.至于在线库的使用是需要一个license_key
只有前面两步不太一样
连接: client = geoip2.webservice.Client(42, <license_key>)
查询 IP: response = client.insights(<IP>)

好了,到此为止,谢谢!

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 104,987评论 12 126
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 142,702评论 18 611
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 23,065评论 6 424
  • 匆匆四年,一晃而过。我还来不及和朋友好好互道珍重,离别就呼啸而至。依稀记得刚走进校园是对什么都好奇,充满朝气的大一...
    向小萍阅读 136评论 10 4
  • 哈尼蹲在床尾,背对着我认认真真地舔爪子。 我凑近她说:尼尼,我想亲亲你。 哈尼停下舔爪子的动作,扭头看了看我,然后...
    长长猫小窝阅读 21评论 0 0