今天花了許多時間在找如何抓個股成交股價,理論上應該要從
台灣證卷交易所的網頁抓才是源頭,但我比較熟悉Yahoo股票的操作頁面,所以決定還是用網頁爬蟲的方式來抓資料。
由於網頁資料分析必須先知道網頁原始碼的格式,因此如果原始碼格式改了,資料分析就有可能錯誤,因此往後有可能需要持續更新分析方式。
Blogger不能使用程式的顯示格式,為了方便閱讀,我只好把程式弄成圖檔如下
 |
Python程式碼 |
 |
Yahoo網頁格式 |
 |
Yahoo網頁原始碼 |
以下是程式說明
- Yahoo股市
- 目前網址格式是https://tw.stock.yahoo.com/q/q?s=STOCKID,STOCKID是股票代號,例如中華電的代號是2412
- 抓網頁時一定要有headers,否則Yahoo會回傳查詢錯誤的網頁回來。headers包含Content-type、Accept、User-Agent,這三個我不懂什麼意思,照抄即可。User-Agent看似跟作業系統有關,但是我在MAC OS實測用Windows的User-Agent是可以的
- 使用到的libarary有httplib2和BeautifulSoup,都需要額外下載
- httplib2: 用來抓取網頁內容用,在MAC OS我是用MAC Port下載,指令是sudo port install py27-httplib2
- BeautifulSoup: 用來分析網頁內容用,在MAC OS我是用MAC Port下載,指令是sudo port install py27-beautifulsoup4
- 使用httplib2的request()可以抓到整個網頁內容,存到doc這個變數裡
- 以Yahoo的網頁格式來看,我以「成交」當成是關鍵字
- 用findAll(text='成交')[0]搜尋整個網頁第一個出現「成交」的地方
- 以原始碼來看,「成交」出現的上一層是th,上一層是tr,再上一層是table,因此可用parent往上找三層,便可抓出整張table的網頁資料
- 以原始碼來看,成交價格是在第二個tr的第三個td,因此可用table.select('tr')[1].select('td')[2].text抓出成交價
resp在python 3 似乎不能用了。 而且result 只會回傳 STOCKID
回覆刪除