軟件測試之一——曾經遇到的bug


  一、簡述

  在一次編寫簡單的python爬蟲的過程中,發現了某個bug,深入學習后了解了這個bug。

  二、bug出現的情景

  在某次編寫python爬蟲的過程中,因為是初學,對爬蟲並不能很好的使用,在邊學習邊編寫代碼的過程中,對某個網站的內容的爬取出現了問題。爬蟲的編寫時首先對單頁內容進行爬取測試,測試時結果正確無誤,接下來進行廣泛內容的爬取,因為數據量較大,所以需要較長時間。

  在內容爬取到大概半個小時的時候,程序進程突然報錯,具體錯誤應為http響應錯誤,程序運行被強行終止。第一次草草的排查錯誤后並未發現問題所在,所以在此運行嘗試。二第二次運行時,經歷比第一次還要短的運行時間后程序在此報錯。

  三、排除bug

  因為是初次編寫爬蟲,在對很多東西並不熟悉的情況下便進行了代碼的編寫。因此遇到無法解決的問題首先想到的是使用搜索引擎搜索學習。從搜索結果中找到了問題所在。原因非常簡單,大多數的大型網站都有為了保護網站資源不受傷害而設立的保護措施,其中有一條便是防止大量的機器人訪問導致網站可用資源緊張。因此大多數的網站設立了防護措施,對於短時間內同意ip地址對網站的重復性訪問會給予限制,以保護網站資源。因此只要避免大量的重復訪問就可以了,對於本機電腦上的爬蟲程序運行,可以限制速度,比如可以限制為每10s訪問一次,可以使用time.sleep()函數來限制。設置時間限制后運行程序,經過較長時間的運行后程序正常結束,未發生問題。

  但是,限制訪問速度同時帶來了速度的減慢,所以可以使用多線程來解決,將原本的類設置為Thread的子類,然后創建線程運行程序,同時線程不能過多,過多會導致訪問速度的加快。

  解決網站限制有很多辦法,其余的還有使用服務器集群,動態輪訓IP地址等方法。

  四、總結

  對於出現bug的情況,尤其是對於新手而言,不要過於慌張,而是應該好好學習打好基礎,無法解決的問題需要善於使用搜索引擎。同時看源代碼是一種非常好的習慣,通過閱讀源代碼可以了解原理,快速排除bug。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM