这篇文章主要讲解了“python3怎么实现简单的ip提取功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python3怎么实现简单的ip提取功能”吧!
准备环境python3,win10系统,当然linux更好,win下需要安装reuqests模块(调用第三方接口进行ip归属地查询需要发起请求)
/Users//Desktop>pip install requests Collecting requests Downloading requests-.-py2.py3-none-any.whl (kB) % kB kB/s Collecting chardet<.,>=. (from requests) Downloading chardet-.-py2.py3-none-any.whl (kB) % kB kB/s Collecting idna<,>= (from requests) Downloading idna--py2.py3-none-any.whl (kB) % kB MB/s Collecting urllib3<,>=. (from requests) Downloading urllib3--py2.py3-none-any.whl (kB) % kB kB/s Collecting certifi>=. (from requests) Downloading certifi-.-py2.py3-none-any.whl (kB) % kB MB/s Installing collected chardet, idna, urllib3, certifi, requests Successfully 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编码
#!usr/bin/python3
#-*-coding:utf-8-*-
requests
requests requests URL = + ip r = requests.get(,timeout=) print() ip = checkip(ip)
运行代码结果如下,初步判断代码应该没问题
C:/Users/92039/Desktop>python 2.py
test
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个ip
222.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()
原有数据 1 2 3 4
运行脚本后
1
2
3
4
a
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
感谢各位的阅读,以上就是“python3怎么实现简单的ip提取功能”的内容了,经过本文的学习后,相信大家对python3怎么实现简单的ip提取功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
原创文章,作者:254126420,如若转载,请注明出处:https://blog.ytso.com/229799.html