美文网首页人人可以学Python大数据 爬虫Python AI Sql@IT·互联网
Python获取IP的地理位置:经纬度,国家,区域,城市

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

作者: HiWoo | 来源:发表于2017-04-26 16:59 被阅读944次
    人人可以学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>)

    好了,到此为止,谢谢!

    相关文章

      网友评论

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

      本文链接:https://www.haomeiwen.com/subject/vhtwzttx.html