程式語言-股票爬蟲

難易程度★★

--

此篇文章使用 Anaconda的 Jupyter寫程式,測試環境 python3.6,事先完成 pandas 及 numpy套件安裝

爬蟲 : (白話文) 把資料抓下來

網路爬蟲 : (白話文) 把網路資料抓下來

先來看大神的程式碼,我們再來拆解

介紹套件

  1. requests:http客戶端資料庫,用於編寫爬蟲及處理網頁資料
  2. StringIO:從本機內部資源讀寫string
  3. pandas: 處理載入數據並將其視覺化,常用於數據分析
  4. numpy:用於數學運算及資料處理,可將數據轉成array的型式

爬蟲來源

今天要爬的資料是從以下路徑…

台灣證券交易所 > 交易資訊 > 盤後資訊 > 每日收盤行情 >全部(不含權證、牛熊證、可展延牛熊證) > CSV下載

注意:『CSV下載』請按『右鍵』,並『複製連結網址』,最後取得的網址就是我們要爬的資料來源http://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=20181207&type=ALLBUT0999

臺灣證券交易所

程式解析

  1. 將所需要的套件先導入

2. CSV網址連結的『&date=』後方日期用指定變數的方式置入

3. 用『requests.get』方式將網路資料先下載到本機的記憶體裡

可以看看抓下來的資料長什麼樣子??我們列舉前1000個字串,如下圖

4. 開始拆解dataframe裡的指令,把他們區分五大塊

4.1 aa:創建一個字典,內容為用 ' ' 包住資料

4.2 bb:將導進來的資料用 '\n' 元素換行

4.3 cc:在每一筆資料中,保留 ' ", '分隔的項目個數等於17(自己可以驗算),及第一個值不等於'=',並利用translate呈現aa裡剩餘的資料

其實可以分解成兩部分來理解

第一部分:去除項目個數不等於17的資料,但前段資料第1個值還有'='

第二部分:去除第1個值有'='的項目,但前段資料卻不是我們要的

4.4 dd:將每一筆資料用換行符號"\n"連在一起形成一個字串

4.5 ee:將字串放入內存StringIO裡,StringIO只讀字串型別的資料

5. 用pandas裡的read_csv讀取ee裡的資料,並指定第0個值為標題header

補充說明:csv的型式是利用逗號 ’,’來分行,換行符號 ’\n’來分

終於將股價資料下載下來了~~

下面將教學如何用不同條件篩選個股

條件篩選個股

教學範例

範例是用本益比<15的條件來篩選

6. to_numeric:因dataframe裡都是string(字串),要將string改成value(數值)才能比大小

7. errors = 'coerce':是因為本益比千位數有逗號,若改成value會出錯,這個指令是讓出錯的地方以NaN型式取代

接下來還有許多變化

8. 可以用sort來排序

9. 也可以設定多種條件

這次的教學教了

  1. 如何網路爬蟲
  2. 如何製作資料表格
  3. 如何製作csv所需資料型態
  4. 如何手動設定自己的篩選條件
  5. 還有一堆pandas裡的函數

--

--