这篇文章主要讲解了“python3怎么实现简单的ip提取功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3怎么实现简单的ip提取功能”吧!
这篇文章主要讲解了“python3怎么实现简单的ip提取功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3怎么实现简单的ip提取功能”吧!
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、西夏网站维护、网站推广。
准备环境python3,win10系统,当然linux更好,win下需要安装reuqests模块(调用第三方接口进行ip归属地查询需要发起请求)\Users\\Desktop>pip install requestsCollecting requests Downloading requests-.-py2.py3-none-any.whl (kB)% kB kB/sCollecting chardet<.,>=. (from requests) Downloading chardet-.-py2.py3-none-any.whl (kB)% kB kB/sCollecting idna<,>= (from requests) Downloading idna--py2.py3-none-any.whl (kB)% kB MB/sCollecting urllib3<,>=. (from requests) Downloading urllib3--py2.py3-none-any.whl (kB)% kB kB/sCollecting certifi>=. (from requests) Downloading certifi-.-py2.py3-none-any.whl (kB)% kB MB/sInstalling collected chardet, idna, urllib3, certifi, requestsSuccessfully installed certifi-. chardet-. idna- requests-. urllib3-
我这里调用阿里的第三方接口进行IP归属地查询,接口地址http://ip.taobao.com/instructions.php接口描述1. 请求接口(GET):/service/getIpInfo.php?ip=[ip地址字串]2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商3. 返回数据格式:{:0,:{:,:,:,:,:,:,:,:,:,:,:,:,:}}其中code的值的含义为,0:成功,1:失败。
这里大概介绍一下思路,读取文件,定义函数,进行循环,发起请求,接收参数,判断,筛选并写入文件,完成。
运行python文件先写头文件格式,告诉系统运行python3的代码,并且以utf-8编码requests requests requests URL = + ip r = requests.get(,timeout=) print() ip = checkip(ip)
运行代码结果如下,初步判断代码应该没问题
C:\Users\92039\Desktop>python 2.py
requests URL = + ip r = requests.get(,timeout=) print() ip = checkip(ip) requests URL = + ip r = requests.get(,timeout=) json_data = r.json() region = json_data[][] print() ip = checkip(ip)
region = json_data[u'data'][u'region']
此处代码是按照接口返回的json的格式来写的 requests URL = + ip r = requests.get(,timeout=) json_data = r.json() region = json_data[][] print(region) ip = checkip(ip)
C:\Users\92039\Desktop>python 2.py
山西省
测试成功
即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理,而是以错误形式展现
这时候就要进行异常处理
引入try/except: x = / ZeroDivisionError err: print(, err)yichang()
C:\Users\92039\Desktop>python 5.py
异常: division by zero
如果未做异常处理将直接报错,导致程序无法继续执行部requests: URL = + ip r = requests.get(URL,timeout=) json_data = r.json() region = json_data[][] print(region):ip = checkip(ip)
C:\Users\92039\Desktop>python 2.py
山西省
接下来加入if判断requests: URL = + ip r = requests.get(URL,timeout=) json_data = r.json() region = json_data[][] region == :::ip = checkip(ip)
然后需要加入打开文件部分的代码
当做文件处理时,需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。file = open()data = file.read()file.close()
这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理
然而with可以很好的处理上下文环境产生的异常= f.read()open() f: ips = f.read().split() ip ips: print(ip)
ips.txt中写入了3个ip222.31.41.253 #山西省202.12.15.52 #日本61.135.169.12 #北京
运行结果
C:\Users\92039\Desktop>python 3.py
222.31.41.253
202.12.15.52
61.135.169.121
将该模块加入到代码中 requests: URL = + ip r = requests.get(URL,timeout=) json_data = r.json() region = json_data[][] region == : print(ip):: open() f: ips = f.read().split() ip ips: print(ip) checkip(ip)
C:\Users\92039\Desktop>python 2.py
222.31.41.253
222.31.41.253
202.12.15.52
61.135.169.121
因为有两次输出,属于山西省的ip会打印两次,由运行结果可知只有第一个ip属于山西省
接下来要加入写入文件的模块,将属于山西省的ip全部写入一个文件open(,) fw: i range(): fw.write()原有数据1234
运行脚本后
1
2
3
4
a
a
a
a
补充一下文件操作的知识文件打开模式
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容】,文件指针自动移到文件尾。"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】,消除文件内容,然后以读写方式打开文件。
x+ ,写读【可读,可写】
a+, 写读【可读,可写】,以读写方式打开文件,并把文件指针移到文件尾。"b"表示以字节的方式操作,以二进制模式打开文件,而不是以文本模式。
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
将写入文件的2行代码加入requests: URL = + ip r = requests.get(URL,timeout=) json_data = r.json() region = json_data[][] region == : open(,) fw: fw.write( + ip):: open() f: ips = f.read().split() ip ips: checkip(ip)
运行脚本:\\92039\> 2
会在桌面创建一个a.txt文档,结果为
222.31.41.253