了解期貨是什麼之後,我們就可以來爬我們需要的資料了!
但爬取資料必須先看懂 html ,所以這篇是假設大家都會 html 語法下練習。
------------------------------------------------------------------------------------------------------------
Step 3 : 用爬蟲爬資料
稍微講解一下我爬資料的思考架構:
1. 觀察目標網頁原始碼
2. 找出目標資料的放置位置並決定實現爬取的方法
3. 決定爬取資料後的整理架構
4. 爬。
接續上一篇講解,我們先到 台灣期貨交易所-期貨每日交易行情 的網頁,
就可以看到今日的交易行情,再任意空白處點選右鍵並按下 Inspect Element,
應該可以看到下圖,
台灣期貨交易所很親切地把資料擺在 table 裡面,所以算是默許你爬資料,
(新加坡國際金融交易所就比較不親切)
我們目標是爬取台灣期指第一天到今天的每天資料。
(沒記錯的話,台灣期指第一天是 1998/07/21)
可以發現,在這邊看當日交易行情的方式是點選上方日期表單,
期貨交易所就會把當日資料丟到 table 裡面。
但這些資料是怎麼放進來呢?
一樣在網頁原始碼裡面,找到 input form 的地方,如下:
可以發現,決定要顯示什麼資料的 input 標籤在這邊,
紅筐內,最下方三個就是改變日期的 input form,
名稱分別為 name = syear; name = smonth; name = sday。
好,這邊我們就要寫一個封包去丟給期貨交易所,跟他提取我們想要的網頁,
再把他丟回來的原始碼爬下來並取出我們要的資料,然後整理到 DataFrame 裡面。
python 安裝方法在這邊分享了 -
安裝好後或已經設置好環境的,如同上一次練習一樣,打開 sublime。
這邊我們就是要寫一個爬取資料的方法,參數是,年、月、日,
這套方法會回傳當天的資料回來。
打入以下原始碼實現:
import requests
from bs4 import BeautifulSoup
from datetime import timedelta, date
def getTodayIndex(year, month, day):
keys = {'syear': year, 'smonth': month, 'sday': day} # 要傳給期貨交易所的 key
r = requests.post("http://www.taifex.com.tw/chinese/3/3_1_1.asp", data = keys) # 抓取這個 key 回傳網頁的原始碼
soup = BeautifulSoup(r.text, "lxml") # 把原始碼做整理
# 這邊下面講
soup_data = soup.select('table')[2].select('table')[1].select('td')
return soup_data
這次爬取的方法,其實已經算比較進階,跟上次河川不一樣。
為什麼這樣說呢?
上次河川資料,是一整排列在原始碼裡面,
所以我們只需要 HTML 的 GET 就可以爬取全部要的資料。
但這次我們需要更新網頁資料再重新爬,所以必須要有 POST 來更新資料。
( 有興趣的人可以自己查查 HTML method )
在最後一段,
soup_data = soup.select('table')[2].select('table')[1].select('td')
這邊就是要取出整個網頁原始碼裡面,你想要知道的資料,對我們來說就是這行,
而在網頁原始碼中,這段資料,被擺在第三個 <table> 中的第二個 <table> 中的 <td>,
這邊大功告成,可以試試看在程式碼裡面加上這段,
print getTodayIndex(2016, 8, 30)
並且在終端機輸入以下,觀看結果。
python DBriver.py
我知道有一點亂,但多少看得出我們把每一個 <td> 中的資料都取出來了。
再來呢,就是要寫一個 loop ,去爬取每一天的資料,
可以自己想想看要怎麼寫 loop 去爬每一天資料並且整理。
這一集先到這邊,下一集再講怎麼把資料整理成我們需要的 DataFrame。
------------------------------------------------------------------------------------------------------------
Reference
[1] 期貨 wikipedia
[2] 股票指數 wikipedia
[3] 台灣期貨交易所, http://www.taifex.com.tw/
[5] A beautiful soup, https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[6] Pickle, https://docs.python.org/2/library/pickle.html
[7] Scikit-Learn, http://machine-learning-python.kspax.io
[8] Scikit-Learn, http://scikit-learn.org/stable/
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(三)
[8] Scikit-Learn, http://scikit-learn.org/stable/
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(三)
沒有留言:
張貼留言