<wbr id="juant"></wbr>
  • <wbr id="juant"></wbr>
    更多課程 選擇中心


    Python培訓

    400-111-8989

    python3制作簡單ip提取器

    • 發布:網絡空間安全社
    • 來源:網絡空間安全社
    • 時間:2018-01-29 11:35

    python3制作簡單的ip提取腳本

    這里先介紹一下任務,前一段時間布置下來一項任務,給一個ip文檔,將其中山西省的ip篩選出來,要兩周內完成任務。由于接下來兩周的電工實習,實習完又是各種考試,導致任務一直沒時間進行,直到放假了才有多余的時間來做這項任務。下面是我做的筆記簡單介紹,不懂的地方歡迎留言!

    準備環境python3,win10系統,當然linux更好,win下需要安裝reuqests模塊(調用第三方接口進行ip歸屬地查詢需要發起請求)

    C:\Users\92039\Desktop>pip install requests
    Collecting requests
      Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
        100% |████████████████████████████████| 92kB 533kB/s
    Collecting chardet<3.1.0,>=3.0.2 (from requests)
      Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
        100% |████████████████████████████████| 143kB 970kB/s
    Collecting idna<2.7,>=2.5 (from requests)
      Downloading idna-2.6-py2.py3-none-any.whl (56kB)
        100% |████████████████████████████████| 61kB 1.4MB/s
    Collecting urllib3<1.23,>=1.21.1 (from requests)
      Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
        100% |████████████████████████████████| 133kB 848kB/s
    Collecting certifi>=2017.4.17 (from requests)
      Downloading certifi-2018.1.18-py2.py3-none-any.whl (151kB)
        100% |████████████████████████████████| 153kB 1.2MB/s
    Installing collected packages: chardet, idna, urllib3, certifi, requests
    Successfully installed certifi-2018.1.18 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22 

    我這里調用阿里的第三方接口進行IP歸屬地查詢,接口地址http://ip.taobao.com/instructions.php

    接口描述

    1. 請求接口(GET):
    /service/getIpInfo.php?ip=[ip地址字串]
    2. 響應信息:
    (json格式的)國家 、省(自治區或直轄市)、市(縣)、運營商
    3. 返回數據格式:
    {"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317", "region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1", "country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000", "county_id":"-1","isp_id":"100017"}}
    其中code的值的含義為,0:成功,1:失敗。 

    這里大概介紹一下思路,讀取文件,定義函數,進行循環,發起請求,接收參數,判斷,篩選并寫入文件,完成。

    運行python文件先寫頭文件格式,告訴系統運行python3的代碼,并且以utf-8編碼

    #!usr/bin/python3 #-*-coding:utf-8-*- 
    #!usr/bin/python3 #-*-coding:utf-8-*- import requests   #引入requests模塊 def checkip(ip):  #定義函數    pass          #在寫程序前先pass查看程序基本框架,運行程序查看是否有錯 
    import requests #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
        r = requests.get('URL',timeout=3) #發起get請求并設置超時    print('test') #此處設置斷點查看代碼是否有錯 ip = '118.81.96.128' checkip(ip)     

    運行代碼結果如下,初步判斷代碼應該沒問題

    C:\Users\92039\Desktop>python 2.py
    test

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
        r = requests.get('URL',timeout=3)
        print('test') #此處設置斷點查看代碼是否有錯 ip = '118.81.96.128' checkip(ip) 
    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
        r = requests.get('URL',timeout=3)
        json_data = r.json() #接收到的json傳遞給json_data    region = json_data[u'data'][u'region'] #解析到json地區名傳遞給region    print('test')  #檢驗是否有錯 ip = '118.81.96.128' checkip(ip) 

    region = json_data[u'data'][u'region']

    此處代碼是按照接口返回的json的格式來寫的

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
        r = requests.get('URL',timeout=3)
        json_data = r.json()
        region = json_data[u'data'][u'region']
        print(region)  #輸出查詢到的地區名 ip = '118.81.96.128' checkip(ip) 

    C:\Users\92039\Desktop>python 2.py
    山西省

    測試成功

    即便Python程序的語法是正確的,在運行它的時候,也有可能發生錯誤。運行期檢測到的錯誤被稱為異常。大多數的異常都不會被程序處理,而是以錯誤形式展現

    這時候就要進行異常處理

    引入try/except

    def yichang():    try:
            x = 1/0    except ZeroDivisionError as err:
            print('異常:', err)
    yichang() 
       

    C:\Users\92039\Desktop>python 5.py
    異常: division by zero

    如果未做異常處理將直接報錯,導致程序無法繼續執行部

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    try:
            URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
            r = requests.get(URL,timeout=3)
            json_data = r.json()
            region = json_data[u'data'][u'region']
            print(region)
        except:
            pass ip = '118.81.96.128' checkip(ip) 

    C:\Users\92039\Desktop>python 2.py

    山西省

    接下來加入if判斷

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    try:
            URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
            r = requests.get(URL,timeout=3)
            json_data = r.json()
            region = json_data[u'data'][u'region']
            if region == '山西省':
                pass        else:
                pass    except:
            pass ip = '118.81.96.128' checkip(ip) 

    然后需要加入打開文件部分的代碼

    當做文件處理時,需要獲取一個文件句柄,從文件中讀取數據,然后關閉文件句柄。

    file = open("a.txt")
    data = file.read()
    file.close() 
       

    這里有兩個問題。一是可能忘記關閉文件句柄;二是文件讀取數據發生異常,沒有進行任何處理

    然而with可以很好的處理上下文環境產生的異常

    with open("a.txt") as f:
        data = f.read() 
     
    with open('ips.txt') as f:       #打開ips這個文本文檔作為f    ips = f.read().split("\n")   #讀取整個文檔并去除換行符    for ip in ips:               
            print(ip)                #循環打印讀取到的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

    將該模塊加入到代碼中

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    try:
            URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
            r = requests.get(URL,timeout=3)
            json_data = r.json()
            region = json_data[u'data'][u'region']
            if region == '山西省':
                print(ip)
            else:
                pass    except:
            pass with open('ips.txt') as f:
        ips = f.read().split("\n")
        for ip in 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全部寫入一個文件

    with open('a.txt','a') as fw:   #打開a.txt文檔,沒有則創建一個,a模式不會改動原有數據    for i in range(5):
            fw.write('\na') 
    原有數據
    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行代碼加入

    #!usr/bin/python3 #-*-coding:utf-8-*- import requests def checkip(ip):    try:
            URL = 'http://ip.taobao.com/service/getIpInfo.php?ip=' + ip
            r = requests.get(URL,timeout=3)
            json_data = r.json()
            region = json_data[u'data'][u'region']
            if region == '山西省':
                with open('a.txt','a') as fw:
                    fw.write('\n' + ip)
            else:
                pass    except:
            pass with open('ips.txt') as f:       #此處的ips.txt是需要事先給出的    ips = f.read().split("\n")
        for ip in ips:
            checkip(ip) 

    運行腳本

    C:\Users\92039\Desktop>python 2.py 

    會在桌面創建一個a.txt文檔,結果為

    222.31.41.253

    這是一個簡單的ip提取器,沒有加入多線程,我是python小白,很多地方還不了解,在寫這個腳本時候讀取文件和寫入文件都是直接去百度上現學現買的,不完美之處歡迎大家提出!

    本文內容轉載自網絡,本著傳播與分享的原則,來源/作者信息已在文章頂部表明,版權歸原作者所有,如有侵權請聯系我們進行刪除!

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:在Windows環境下用c重要文件
    下一篇:Python 2遷移到Python 3教程指南

    2021年Python面試題及答案匯總詳解

    python數據分析,你需要這些工具

    Python培訓講解二叉樹的三種深度

    Python培訓:如何實現窮舉搜索?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    天天日天天射天天干天天伊|奇米电影|奇米网_奇米首页|奇米首页 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>