Python獲取IP的地理位置:經緯度,國家,區域,城市

karspb發表於2021-09-09

圖片描述

人人可以學Python .png

我們現在手機使用的定位主要是以GPS衛星為主,A-Gps,IP輔助定位。而網站還是透過瀏覽網頁使用者的IP來得到使用者的地理位置,透過分析,調整業務。
GeoIP2
很多公司都是使用Maxmind網站的IP資訊庫,裡面包含著IP的詳細資訊,有付費的也有免費的,收費與免費的區別就是精準度和覆蓋率
GeoIP也有python的lib,有GeoIP,和GeoIP2,在這裡我們就拿GeoIP2來試一試獲取一個IP的地理位置。

GeoIP2安裝###

安裝GeoIP2還是一樣:
命令安裝:

pip install geoip2

也可以去Github網站下載安裝

地址:

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, )
查詢 IP: response = client.insights()

好了,到此為止,謝謝!


作者:退出簡書黑
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2001/viewspace-2803067/,如需轉載,請註明出處,否則將追究法律責任。

相關文章