用户画像之IP批量解析
最近需要从公司的日志数据中抽取用户的ip地址对用户进行地域分析,一开始的思路是循环遍历IP请求淘宝提供的接口(apiurl = “http://ip.taobao.com/service/getIpInfo.php?ip=%s” %ip),但是因为数据量太大(几十万个ip),请求太频繁,会出现请求失败的情况。经过在网上查找资料,发现了python 有一个很强大的IP解析库GeoIP库,能完美的解析出IP地址所在的国家、省、市。
- 依赖包(建议翻墙下载)
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
gunzip GeoLite2-Country.mmdb.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
gunzip GeoLite2-City.mmdb.gz # 能解析出IP所在省份
- 代码示例
import geoip2.database
def parse_ip(ip):
try:
reader = geoip2.database.Reader('../tools/GeoLite2-City.mmdb')
data = reader.city(ip)
print("IP Address: ", ip)
print("Country:", data.country.name) # 获取国家
print("Subdivisions: ", data.subdivisions.most_specific.name) # 获取省份
print("City: ", data.city.name) # 获取城市
print("Latitude: ", data.location.latitude) # 获取经度
print("Longitude: ", data.location.longitude) # 获取纬度
except:
print(ip,'不存在')
parse_ip('183.30.218.23')
- 结果如下
IP Address: 183.30.218.23
Country: China
Subdivisions: Guangdong
City: Huizhou
Latitude: 23.0833
Longitude: 114.4
-
将IP批量解析后将省份和对应的人数用pyechart进行可视化(如图):
-
geoIP的中国省份与pyechart中国省份映射字典
china_map = {'Beijing':'北京',"Tianjin":'天津','Shanghai':'上海','Chongqing':'重庆','Hebei':'河北','Shanxi':'山西','Liaoning':'辽宁','Jilin':'吉林','Heilongjiang':'黑龙江','Jiangsu':'江苏','Zhejiang':'浙江','Anhui':'安徽','Fujian':'福建','Jiangxi':'江西','Shandong':'山东','Henan':'河南','Hubei':'湖北','Hunan':'湖南','Guangdong':'广东','Hainan':'海南','Sichuan':'四川','Guizhou':'贵州','Yunnan':'云南','Shaanxi':'陕西','Gansu':'甘肃','Qinghai':'青海','Taiwan':'台湾','Inner Mongolia Autonomous Region':'内蒙古','Guangxi':'广西','Tibet':'西藏','Ningxia Hui Autonomous Region':'宁夏','Xinjiang':'新疆','Hong Kong':'香港','Macao':'澳门'}