一,事先新建数据库,django,表 origin ,将ip事先导入进去
CREATE TABLE `origin` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ip` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `country` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `region` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `city` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `isp` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2612 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
二,运行python
#!/usr/local/bin/python #coding: utf-8 import json,pymysql,time from urllib import request def get_conn(): conn = pymysql.connect(host=\'192.168.80.200\', port=3306, user=\'root\', passwd=\'123\', db=\'django\', charset=\'utf8\') return conn def query_all(cur, sql, args): cur.execute(sql, args) return cur.fetchall() def ip_region(): conn = get_conn() cur = conn.cursor() k=j=0 # k记录获得502网关错误,j记录轮寻次数 sql_ip = \'select ip from origin where country is NULL;\' while query_all(cur=cur,sql=sql_ip,args=None): results=query_all(cur=cur,sql=sql_ip,args=None) for i in results: res = url(i[0]) #获取指定ip的归属地函数 if res: sql_add = "update origin set country=\'"+res[0]+"\',region=\'"+res[1]+"\',city=\'"+res[2]+"\',isp=\'"+res[3]+"\' where ip=\'"+i[0]+"\';" # print(sql_add) cur.execute(sql_add) conn.commit() else: k=k+1 print(\'====>get 502:\',k) time.sleep(0.5) j=j+1 print(\'========>second round:\',j) cur.close() conn.close() return k,j def url(ip): url = "http://ip.taobao.com/service/getIpInfo.php?ip="+ ip #淘宝查ip归属地请求api try: jsondata = json.loads(request.urlopen(url).read()) if jsondata[\'code\'] == 1: jsondata[\'data\'] = {\'region\': \'\', \'city\': \'\', \'isp\': \'\'} print(jsondata[\'data\'][\'country\'], jsondata[\'data\'][\'region\'], jsondata[\'data\'][\'city\'], jsondata[\'data\'][\'isp\']) return ( jsondata[\'data\'][\'country\'], jsondata[\'data\'][\'region\'], jsondata[\'data\'][\'city\'], jsondata[\'data\'][\'isp\']) except: return False if __name__ == "__main__": start_time = time.asctime(time.localtime()) result = ip_region() print(\'get 502 counts:\',result[0]) print(\'round counts:\',result[1]) print(\'start time:\',start_time) print(\'end time:\',time.asctime(time.localtime()))