為何我的股票爬蟲都會失敗?你可能已經變成黑名單了!

行銷資料科學
PythonStock
Published in
6 min readFeb 28, 2019

在製作股票爬蟲時,常常執行幾次後,就無法再向網站請求,尤其是在公開資訊觀測站中,其問題發生的原因,是因為公開資訊觀測站的伺服器,將您的IP給禁止了,原因很簡單

您可能被誤認為「駭客」

由於現在網路日益發達,資訊安全越來越受到重視,尤其是在金融方面的行業,分配到資安的資金逐年增加,而本篇文章的主題,就是為了防範網路攻擊中的「Dos阻斷式攻擊」,而產生的連線困擾,為了找到問題,本篇文章就來深刻探討,從最基礎的網路架構開始。

網站概念

網站概念如下圖,當使用者想要進入網站,當然需要透過瀏覽器(Google chome、IE、火狐等),而瀏覽器會對伺服器(當然不只Flask Server,還有很多種不同的伺服器)提出請求。

伺服器收到請求後,就會將網站的檔案回傳給瀏覽器,讓使用者可以看到一個完整的網站,因此到底是傳送什麼樣的檔案給瀏覽器呢?其實我們都是可以看得到的,這些檔案都會存在C槽瀏覽器的快取資料夾中,而您最簡變得檢視方式,可以直接在任何一個網頁中,按下F12,便可以看到如下方的畫面,這些資料就是伺服器傳送過來的資料。

這麼多文字要如何回傳呢?其實是透過封包的方式做傳送,當您在網頁中已經按下F12打開以下畫面後,切換右上角按鈕到「Network」。

切換過去後都是空的,其原因很簡單,這個畫面是紀錄所有在瀏覽器中有傳送動作的封包,就如同河流中捕魚的網子,如果魚都在原地不動,那網子就永遠不會抓到魚,因此我們需要按下F5重新整理這個網站。

整理完後便可以看到,多了很多個檔案(記得要將左上方選到All,才能夠看到全部)。

以上的這些檔案,就是我們項伺服器請求的成果,由此可知,有時明明網路已經切斷,但打開瀏覽器,之前開過得幾個網站卻還是會顯示出來,但如果按下網站中的連結,就會顯示連線失敗,其實就是因為,之前已經請求過得網站,還停留在您的C槽中,因此網頁還可以顯示,但之後的網站連結,並沒有在C槽中,因此出現錯誤。

另外一方面,假設您在一個網站中看到好看的影片,想要將它抓下來,其實這個影片已經在您的電腦裡面了,只是在C槽中,您有技巧的翻找才能找到。

Dos阻斷式攻擊

講解網路傳遞的概念,目的就是為了解釋Dos阻斷式攻擊,至此已經得知在網路世界中,使用者會與伺服器一直互相傳遞封包,您在網站上的每個動作,都會跟伺服器做溝通,就連最簡單的重新整理,也要向伺服器請求,就用這個概念來做一個誇張的比喻,那如果在5秒鐘內,連續按了100萬下F5,在遠方的網站伺服器就要回應100萬次,但伺服器其實也如果您的電腦,只是配備方面比您用的桌電還要優良而已,面對這麼大量的請求,很可能會如同家用桌電一樣,跳出藍色畫面 — 當機。

每個伺服器能負荷的請求量都是有限的,因此如果超過負荷量,伺服器就會當機,當伺服器當機,整個網站服務就會停止,如同您有時尚網站會看到該網站跳出「網頁維修中」、「發生問題請稍等」等,也許是網站真的在維修更新,也有可能是網站遭到攻擊服務中斷,因此跳出停止服務的頁面。

若您有個競爭對手,您想要癱瘓他的網站,讓他的顧客滿意度降低,這個攻擊方式會極為有效。

伺服器面對這個資安問題,有兩個解決方法:

  1. 花錢購買更多伺服器:治標不致本,勞民又傷財,基本上根本不會有網站想要使用此方式,因為只要駭客一直持續的請求,這個速度絕對是硬體無法跟上的。
  2. 限制請求次數:這是本篇文章的重點,也是造成各位在爬蟲中會被強至停止的原因,目前的網站伺服器也都採用這種方式。限制每個來請求的使用者請求的的次數跟頻率,若短時間內太多次(通常每5秒請求一次,就算高頻率了,但會一各個伺服器而不同),就讓這個IP禁止訪問,通常禁止的時間會半天到一天不等,甚至有些網站會永久禁止(但不常見,因為這要特別設定)。

如何避免被誤認為Dos阻斷式攻擊

雖然我們利用機器人的目的在於爬蟲,而不是想要癱瘓別人的伺服器,但對於伺服器來說,它不知道我們居心何在,因此一般的網站都是不歡迎任何的機器人,以降低資安問題,因此必須要模仿真人的行為,便可以防止被禁止訪問。

一般伺服器偵測機器人的兩個要件,只要有其中移項符合,都會被認定是機器人,因而禁止您的IP訪問:

  1. 短時間內請求頻率過高:這毋庸置疑的會被發現是機器人,譬如說每秒鐘按F5按鍵100次,這是常人無法達到的,因此很容易會被網站偵測出來,因此避免的方式就是加長請求的間隔時間,在Python中,就是在爬蟲的For迴圈當中加入以下的程式碼,其意思代表休息五秒後在繼續執行,而至於要休息幾秒,就需要您自行實驗了,因為每個伺服器的設定不同,甚至有些嚴格的網站,若30秒重複請求,都會將您列為黑名單。

2. 機械化動作:顧名思義,就是一直重複做一樣的動作,若上方的程式碼執行,爬蟲會每五秒鐘執行一次,但若是真的使用者在瀏覽網站時,頻率是不會如此固定的,因此需要在將上方的程式碼再做修改,在其中加入亂數,如下圖的亂數,便是指定在5到10中的任意數字,如此一來便更能模仿真人行為了。

進階學習

模仿真人一直是被廣泛討論的問題,在AI出來後,這個想法已經漸漸被實現,若您有興趣,可以研究如何破解驗證碼,更進階一點,可以研究圖像辨識,來破解Google的防機器人系統,這些技術都必須用到機器學習、類神經的方式,才能夠達到,希望對您能有幫助。

作者:

楊超霆(臺灣行銷研究有限公司 資料科學研發工程師)

歡迎加入我們的Line@獲取即時訊息!https://line.me/R/ti/p/%40cde8265r

更多的專業課程:

--

--

行銷資料科學
PythonStock

Marketing data science. 台灣第一個行銷資料科學(MDS)知識部落,本粉絲專頁在探討行銷資料科學之基礎概念、趨勢、新工具和實作,讓粉絲們瞭解資料科學的行銷運用,並開啟厚植數據分析能力之契機。粉絲專頁:https://www.facebook.com/MarketingDataScienceTMR