港股大波動想趁勢而入嗎?先爬下異動股吧!-【附Python程式碼】

行銷資料科學
PythonStock
Published in
5 min readSep 23, 2019

近期國際情勢與相關議題升溫,導致香港股票明顯下滑,使的許多人有趁勢進入的想法。在股票小秘書的課程中,有許多學員問過是否也能應用在港股上,這次就實作港股的爬蟲分享。

本次實作爬取的網站如下,是某股票網站,目的是爬取異動股,異動股的意思是當日漲跌超過7%~10%,在台灣又被成為管制股票,由於短時間變動太大,一方面以防大戶資金炒作,另一方面也是提醒小股民,這支股票現在具有非常風險性,要謹慎購買。會爬取異動股的原因在於,港股的異動股風險會來的比台股高,原因有很多,其中主要是雙方金管會的法令不同,台灣的金管會是相對嚴格的,這樣做其實是保護台灣資金,因為台灣市場小,很容易受到外資大戶影響,若沒有嚴格管制外匯,那台灣的資金很容易會被做空抽走。

實作流程

1.選擇爬蟲方式

爬蟲的方法有很多,看到該資料屬於表格,立馬會想利用pandas的爬蟲套件進行爬取,因為pandas爬蟲爬取table這類的表格資料,非常的方便,但經過實作後(如下圖),並沒有成功。

錯誤的結果顯示「Forbidden」,就是被禁止的意思,因此猜測該網站不歡迎爬蟲的行為,代表需要加入header來欺騙網站伺服器。

2. 尋找header

如同之前文章的post爬蟲,以相同的方式取得header。先到該股票網站按下F12,到如下畫面。

首先就是到XHR的部分檢查是否有JSON的API可以直接拉資料,但看看三個檔案,裡面都沒有異動股票的資料,因此很明顯沒有JSON資料可以拉,甚至異動股的資料根本不再XHR裡面。

尋找以後,發現網站的資料在DOS裡面,這就是我們要的目的資料。

所幸切回Headers,將Repuest Headers裡面的內容全部複製下來,貼到程式碼中,切忌是複製Repuest Headers,因為這才是您傳送給該伺服器的請求header,Response Headers是請求完伺服器回饋給您的Header,如同一個是寄件人一個是收件人。

加入header後,發現pandas的爬蟲依然是被禁止的,看來希望又落了空。

3.更換爬蟲方式

山不轉路轉,換一種爬蟲方式進行,使用最古老的BS4試試看,其結果如下,真的可以爬到資料了。

BS4爬蟲程式
爬蟲結果

既然可以爬下來,剩下就只是格式處理的問題了,但這又是另一門功夫,畢竟目標資料是表格式的,編排起來會有點複雜。

4.格式邊排

這次實作保留所有欄位,等於是將結果一字不漏地轉為DataFrame的格式,一目瞭然。首先先設定11個欄位分別是row、number、name、updown、nominal_price、move、movepercent、high、low、price、currency。

接著利用for迴圈,將一列一列的資料讀入進行邊排。

最後將結果存成DataFrame資料。

可以利用Spyder裏頭Variable explorer的功能,打開裏頭result變數,看到的表如下,是不是和網站上的一模一樣呢?

result變數

這個爬蟲結果也可以推播到您的Line上面

變成您專屬的股票小秘書喔!

您可以考慮:

實體課程:

線上課程:

書籍:

程式碼:

作者:楊超霆(臺灣行銷研究有限公司 資深資料科學家)

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

您可能有興趣:

--

--

行銷資料科學
PythonStock

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