IP归属地查询步伐

紧接上文,从几个IP地址归属地的查询,到几千IP地址归属地的查询,最后到百万级别以上的IP地址归属地查询。
1、同样几个IP地址的归属地查询就采用纯手动的方式,用百度、谷歌(科学上网需要翻墙)找几个可以提供IP地址归属地查询的WEB页面就可以了。

2、几千个ip地址可以请求公网开发的API查询接口,比如百度的IP定位API,每天限制请求次数100万:http://developer.baidu.com/map/index.php?title=webapi/ip-api
脚本如下,ip.txt存放的是ip地址一行一个,result.tmp是存放的查询结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env python
import urllib,json

def getIpAddr():
outfp = open('result.tmp', 'w')
infp = open('ip.txt','r')
for ip in infp:
ip = ip.replace('\r\n', '')
ip = ip.replace('\n', '')
obj = urllib.urlencode({'ip':ip, 'ak':'Ij1sWn****************XGZxm2'})
req = 'http://api.map.baidu.com/location/ip?'+obj
f = urllib.urlopen(req)
res = json.loads(f.read())
if res['status']:
print ip
outfp.write(ip)
outfp.write("\n")
else:
print res['content']['address']
outfp.write(res['content']['address'].encode('utf8'))
outfp.write("\n")
infp.close()
outfp.close()

getIpAddr()

3、百万级别的IP归属地查询,如果需要快速的查询出结果采用第二种方式是不太理想的,原因就不累述了。我安装的是一个IP查询的python模块,自带数据:https://github.com/lxyu/17monip 安装使用方法github上已经说的很清楚了,脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding=utf-8
#!/user/bin/env python
import IP

def ipLocal():
outfp = open('result.tmp', 'w')
infp = open('ip.txt','r')
for line in infp:
ip = line.replace('\r\n', '')
ip = line.replace('\n', '')
local = IP.find(ip)
local = local.replace("\t", '')
outfp.write(local.encode('utf8'))
outfp.write("\n")
outfp.close()
infp.close()
ipLocal()

查询速度很快,百万级别的也就1分钟左右,如果用公网开放的API查询至少要1天的时间,最后附上一个关于IP地址归属地查询有可能用到的网站http://www.ipip.net/download.html。

----------------本文结束 感谢阅读----------------