例一:
使用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,免費。