您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python一键查询10万个ip地址归属地

时间:2019-09-25 09:49:42  来源:  作者:

近期公司收到监管部门的通知:公司的金融软件在境外也能被使用。为了查明这个原因,我们从服务器的后台日志中,采集了近10万个国内外的ip地址,现在想要查询出这10万个ip地址的归属地,手动查询的话,效率太低,所以我决定使用Python来解决这个问题!!!

 

一:我们需要找一个可以使用的api接口

1. 打开浏览器,输入ip,可以查询到我们当前的ip地址,此时,相应的api接口也就出现了

 

 

10万个ip地址头疼吧?Python助你一键查询归属地

私信小编01 获取PDF,视频教程,以及交流答疑哦!

 

2. 按F12, 打开浏览器的开发界面,然后在上图的查询框中,输入一个ip地址,点击"查询",然后点击network---JS---点击左侧的Name--点击右侧的Preview, 此时,我们就可以看到服务器返回的结果了

 

10万个ip地址头疼吧?Python助你一键查询归属地

 

3. 点击上图中右侧的Header菜单, 我们将得到一个URL ,此URL就是我们要找的api接口了,此时,我们发现,只需要将ip地址改变下,就可以查询不同的ip地址的归属地了 https://open.onebox.so.com/dataApicallback=jQuery18305921599528683013_1562291824827&type=ip&src=onebox&tpl=0&num=1&query=ip&ip=60.187.173.10&url=ip&_=1562292144039

 

10万个ip地址头疼吧?Python助你一键查询归属地

 

二:读取文件

所有的ip地址我是保存在一个叫ip3.txt的文件中,每个ip地址单独占用一行,所以,在这里,我定义了一个函数,将所有的ip地址拿出来,合并成一个列表,便于后面的函数调用

 

#!python3
#coding=utf-8
import requests
import json
import os
import re
'''
ip地址查询
'''
def readfile():
 iplist = [] #定义一个空列表
 files = open('ip3.txt','r',encoding='utf-8') #读文件
 f = files.readlines() #得到一个列表
 for n in f:
 n1 = n.replace('n','') #去掉f列表中元素的换行符
 iplist.Append(n1) #合并成一个新的列表
 return iplist #返回一个包含了所有ip地址的列表
rf = readfile() #将函数实例化,便于调用

 

三:思路分析

ip3.txt这个文件我们已经处理完了,接下来就要看一个很关键的地方,我们如何去更好的处理浏览器返回的这个结果,如下图,这个结果可以看成是两部份组成:

jQuery18305921599528683013_1562291824827({0: "中国", 1: "浙江省", 2: "绍兴市", 3: "", 5: "电信", ip: "60.187.173.10", isLocalIp: false})

标记为红的地方,我们可以将其看成是一个字典,这样的话,字典取值就很简单了吧,其它没有用的内容,我们可以通过正则表达式将其过滤掉,有了这种思路,我们就可以继续写代码了

 

10万个ip地址头疼吧?Python助你一键查询归属地

四:继续写代码

 

def checkip():
 #读取每一个ip地址
 for n in rf: 
 try:
 print(n)
 #将ip地址作为变量传到api接口中
 api='https://open.onebox.so.com/dataApi?callback=jQuery183039083655956956864_1562117373170&type=ip&src=onebox&tpl=0&num=1&query=ip&ip=%s&url=ip&_=1562119610793'%n
 #向api接口发送一个请求
 response = requests.get(api).content.decode('utf-8')
 #使用正则,过滤到返回内容中没用的信息,只保留有用的信息,此时返回的结果为字符串
 filters = re.findall(r'((.*?))',response)[0]
 #将字符串转成字典
 getjs = json.loads(filters)
 print(getjs)
 #因为有些国外的ip地址是没有省份的,也就是没有键=1,所以这里要判断下
 if '1' in getjs.keys():
 #如果存在键为1, 则输出国家,省份,ip这三个信息
 print(getjs['0'],getjs['1'],getjs['ip'])
 with open('sum.csv','a',encoding='utf-8') as file:
 file.write(getjs['0'] + ',' + getjs['1'] + ',' + getjs['ip'] + 'n')
 else:
 #如果不存在键为1, 则输出国家,省份以空代替,ip这三个信息
 print(getjs['0'],getjs['ip'])
 with open('sum.csv','a',encoding='utf-8') as file:
 file.write(getjs['0'] + ',' + 'None' + ',' + getjs['ip'] + 'n')
 #有些ip地址可以查询不出来归属的,那么代码就会执行失败,所以这里用了try...execpet,将异常ip保存在error.csv文件中
 except:
 with open('error.csv','a',encoding='utf-8') as file:
 file.write(n + 'n')
checkip()

 

运行完代码之后,得到的结果如下图(如果发现用Excel打开,中文显示乱码的话,可以先用notepad打开,把编码格式改成ANSI,然后保存成excel格式)

 

 

10万个ip地址头疼吧?Python助你一键查询归属地

 

总结

整个代码加起来大概50行左右,我自己花了1个小时写的,这种做法,提高了我的工作效率,让我有更多的时间去学习新的知识。如果你觉得我写的内容对你有帮助的话,别忘了点击关注和订阅,有任何工作上的问题



Tags:Python   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  Tags: Python  点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  Tags: Python  点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  Tags: Python  点击:(4)  评论:(0)  加入收藏
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Tags: Python  点击:(6)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  Tags: Python  点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  Tags: Python  点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: Python  点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  Tags: Python  点击:(5)  评论:(0)  加入收藏
▌简易百科推荐
大家好,我是菜鸟哥,今天跟大家一起聊一下Python4的话题! 从2020年的1月1号开始,Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的...【详细内容】
2021-12-28  菜鸟学python    Tags:Python4   点击:(1)  评论:(0)  加入收藏
学习Python的初衷是因为它的实践的便捷性,几乎计算机上能完成的各种操作都能在Python上找到解决途径。平时工作需要在线学习。而在线学习的复杂性经常让人抓狂。费时费力且效...【详细内容】
2021-12-28  风度翩翩的Python    Tags:Python   点击:(1)  评论:(0)  加入收藏
Python 是一个很棒的语言。它是世界上发展最快的编程语言之一。它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性。整个 Python 及其库的生态系统使...【详细内容】
2021-12-27  IT资料库    Tags:Python 库   点击:(2)  评论:(0)  加入收藏
菜单驱动程序简介菜单驱动程序是通过显示选项列表从用户那里获取输入并允许用户从选项列表中选择输入的程序。菜单驱动程序的一个简单示例是 ATM(自动取款机)。在交易的情况下...【详细内容】
2021-12-27  子冉爱python    Tags:Python   点击:(4)  评论:(0)  加入收藏
有不少同学学完Python后仍然很难将其灵活运用。我整理15个Python入门的小程序。在实践中应用Python会有事半功倍的效果。01 实现二元二次函数实现数学里的二元二次函数:f(x,...【详细内容】
2021-12-22  程序汪小成    Tags:Python入门   点击:(32)  评论:(0)  加入收藏
Verilog是由一个个module组成的,下面是其中一个module在网表中的样子,我只需要提取module名字、实例化关系。module rst_filter ( ...); 端口声明... wire定义......【详细内容】
2021-12-22  编程啊青    Tags:Verilog   点击:(9)  评论:(0)  加入收藏
运行环境 如何从 MP4 视频中提取帧 将帧变成 GIF 创建 MP4 到 GIF GUI ...【详细内容】
2021-12-22  修道猿    Tags:Python   点击:(6)  评论:(0)  加入收藏
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  我头秃了    Tags:python   点击:(9)  评论:(0)  加入收藏
所谓内置函数,就是Python提供的, 可以直接拿来直接用的函数,比如大家熟悉的print,range、input等,也有不是很熟,但是很重要的,如enumerate、zip、join等,Python内置的这些函数非常...【详细内容】
2021-12-21  程序员小新ds    Tags:python初   点击:(5)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Python可乐    Tags:Python   点击:(8)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条