python ip轉地址;Python IP to GEO

例一:

使用geoip2庫來實現
具體使用如下:
注意需要下載GeoLite2-City.mmdb庫到本地。
下載==>http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
geoip2返回的具體信息可以先打印出來,格式稍有差異需要
什麼再調整地址的獲取方式。
這種方式大多情況都可以拿到一個大致地址。如果是國內IP建議結合百度地圖實現,如例二。

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import sys
import geoip2.database
import requests
import json
reload(sys)
sys.setdefaultencoding('utf8')
try:
	# 這裏注意文件路徑
    reader = geoip2.database.Reader('./GeoLite2-City_20191224/GeoLite2-City.mmdb')
    ip = sys.argv[1]
    #print "<ip: %s>" % ip
    response = reader.city(ip)
    country = response.country.names['zh-CN'] if response.country.names.has_key('zh-CN') else " "
    city = response.city.names['zh-CN'] if response.city.names.has_key('zh-CN') else " "
    country_name = country.encode("UTF_8")
    print (country+" "+city).encode("UTF-8")
except Exception as e:
    print e
    print " "

例二:

調用百度地圖開放平臺的接口,來獲取國內IP的詳細地址。目前可以得到如下信息:

{
"address": "CN|北京|北京|None|ALIBABA|0|0",
"content": {
	"address_detail": {
		"province": "北京市",
		"city": "北京市",
		"district": "",
		"street": "",
		"street_number": "",
		"city_code": 131
		},
	"address": "北京市",
	"point": {
		"y": "4825007.72",
		"x": "12950160.97"
	}
},
"status": 0
}

代碼:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import sys
import geoip2.database
import requests
import json
reload(sys)
sys.setdefaultencoding('utf8')
try:
    reader = geoip2.database.Reader('./GeoLite2-City_20191224/GeoLite2-City.mmdb')
    ip = sys.argv[1]
    response = reader.city(ip)
    country = response.country.names['zh-CN'] if response.country.names.has_key('zh-CN') else " "
    city = response.city.names['zh-CN'] if response.city.names.has_key('zh-CN') else " "
    country_name = country.encode("UTF_8")
    if country_name == '中國':
        result = requests.get("http://api.map.baidu.com/location/ip?ip="+ip+"&ak=GbR1YfmFzR**************pyIxkvG&coor%20=%20bd09ll")
        if result.status_code == 200:
            result = json.loads(result.content)
            address = result["content"]["address"]
            print address
        else:
            print "中國"
    else:
        print (country+" "+city).encode("UTF-8")
except Exception as e:
    print e
    print " "

百度地圖開放平臺的信息,還有api文檔點這裏http://lbsyun.baidu.com/
ak是在平臺上生成的KEY,免費。

發佈了37 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章