这是在oschina上看到的文章,提到淘宝的ip地址库,有点意思,顺便就用python练手了~~

明眼人都可以看出来,淘宝IP地址库是淘宝的服务(真心不想说这句……),提供了两大服务:

  • 1. 根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家、省、市和运营商。 

  • 2. 用户可以根据自己所在的位置和使用的IP地址更新我们的服务内容。 

主要的优势(其实没必要说,淘宝这么大的公司还不能信任么?):

  • 1. 提供国家、省、市、县、运营商全方位信息,信息维度广,格式规范。 

  • 2. 提供完善的统计分析报表,省准确度超过99.8%,市准确度超过96.8%,数据质量有保障。 

不过这个服务也是有限制的,据官方说:

  • 为了保障服务正常运行,每个用户的访问频率需小于10qps。 

说了这么多的废话(主要是为了凑字数),开始正题,python解析数据!

整个流程分两步:一,构造网址并读取网页数据;二,json解析网页数据。代码如下:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import urllib, urllib2
import json
import sys
import re
ip = raw_input(r'IP : ')
ip = str.strip(ip)
ptn = re.compile(r'(([12][0-9][0-9]|[1-9][0-9]|[1-9])\.){3,3}([12][0-9][0-9]|[1-9][0-9]|[1-9])')
rel = ptn.match(ip)
if rel:
pass
else:
print"IP not valid"
    sys.exit()
try:
    urlfp = urllib.urlopen('http://ip.taobao.com/service/getIpInfo.php?ip='+ ip)
exceptException, e:
print"Error ", e
    sys.exit()
ipdata = urlfp.read()
urlfp.close()
allinfo = json.loads(ipdata)
for oneinfo in allinfo:
if"code"== oneinfo:
if0== allinfo[oneinfo]:
print"ip   : "+ allinfo["data"]["ip"]
print"city : "+ allinfo["data"]["country"],
print allinfo["data"]["region"],
print allinfo["data"]["city"],
print"("+ allinfo["data"]["isp"]+")"
else:
print"parse error"
            sys.exit()