您好,登錄后才能下訂單哦!
這篇文章主要講解了“python3怎么實現(xiàn)簡單的ip提取功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python3怎么實現(xiàn)簡單的ip提取功能”吧!
準備環(huán)境python3,win10系統(tǒng),當然linux更好,win下需要安裝reuqests模塊(調用第三方接口進行ip歸屬地查詢需要發(fā)起請求)
\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格式的)國家 、?。ㄗ灾螀^(qū)或直轄市)、市(縣)、運營商 3. 返回數(shù)據(jù)格式: {:0,:{:,:,:, :,:,:,:, :,:,:,:, :,:}} 其中code的值的含義為,0:成功,1:失敗。
這里大概介紹一下思路,讀取文件,定義函數(shù),進行循環(huán),發(fā)起請求,接收參數(shù),判斷,篩選并寫入文件,完成。
運行python文件先寫頭文件格式,告訴系統(tǒng)運行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程序的語法是正確的,在運行它的時候,也有可能發(fā)生錯誤。運行期檢測到的錯誤被稱為異常。大多數(shù)的異常都不會被程序處理,而是以錯誤形式展現(xiàn)
這時候就要進行異常處理
引入try/except
: x = / ZeroDivisionError err: print(, err) yichang()C:\Users\92039\Desktop>python 5.py
異常: division by zero如果未做異常處理將直接報錯,導致程序無法繼續(xù)執(zhí)行部
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)
然后需要加入打開文件部分的代碼
當做文件處理時,需要獲取一個文件句柄,從文件中讀取數(shù)據(jù),然后關閉文件句柄。
file = open() data = file.read() file.close()這里有兩個問題。一是可能忘記關閉文件句柄;二是文件讀取數(shù)據(jù)發(fā)生異常,沒有進行任何處理
然而with可以很好的處理上下文環(huán)境產生的異常
= 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()
原有數(shù)據(jù) 1 2 3 4
運行腳本后
1
2
3
4
a
a
a
a
a補充一下文件操作的知識
文件打開模式"+" 表示可以同時讀寫某個文件
r ,只讀模式【默認模式,文件必須存在,不存在則拋出異常】
w,只寫模式【不可讀;不存在則創(chuàng)建;存在則清空內容】
x, 只寫模式【不可讀;不存在則創(chuàng)建,存在則報錯】
a, 追加模式【可讀; 不存在則創(chuàng)建;存在則只追加內容】,文件指針自動移到文件尾。
"b"表示以字節(jié)的方式操作,以二進制模式打開文件,而不是以文本模式。
r+, 讀寫【可讀,可寫】
w+,寫讀【可讀,可寫】,消除文件內容,然后以讀寫方式打開文件。
x+ ,寫讀【可讀,可寫】
a+, 寫讀【可讀,可寫】,以讀寫方式打開文件,并把文件指針移到文件尾。
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打開時,讀取到的內容是字節(jié)類型,寫入時也需要提供字節(jié)類型,不能指定編碼
將寫入文件的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
會在桌面創(chuàng)建一個a.txt文檔,結果為
222.31.41.253
感謝各位的閱讀,以上就是“python3怎么實現(xiàn)簡單的ip提取功能”的內容了,經過本文的學習后,相信大家對python3怎么實現(xiàn)簡單的ip提取功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。