2021年5月22日 星期六

用EXCEL VBA網路爬蟲擷取YAHOO股市資料

用EXCEL VBA網路爬蟲擷取YAHOO股市資料


EXCEL錄製巨集爬取YAHOO股市資料,

會有亂碼的問題,用PYTHON來爬取,

對一般人來說門檻又太高,

如果如何在EXCEL VBA就可以輕鬆爬取網路資料,

就是本文所要分享的重點。

當然本文不是要推崇VBA有多棒,Python不好用,

我的想法是只要用對工具,工作可以很愜意,

可以協同應用工具,讓彼此都能發揮最大的強項,

是本文寫說明的,

另外順便分享在EXCEL除了用匯入資料從WEB功能外,

也可以用IE物件,

功能很像是Python的requests加上beautifulsoup4差不多功能,

不同的是,可以將下載的資料直接放在EXCEL,

也就是把EXCEL當成資料庫用,這樣可以減少很多資料庫匯入匯出的麻煩。


首先,YAHOO股市當日行情表網址:

https://tw.stock.yahoo.com/class-quote?sectorId=1&exchange=TAI


*改用IE物件下載


VBA程式碼

Sub 下載YAHOO_水泥()

    '清除資料

    Cells.Clear

    '1.建立IE物件

    Set ie = CreateObject("internetexplorer.application")

    '2.連線到網址

    ie.navigate "https://tw.stock.yahoo.com/class-quote?sectorId=1&exchange=TAI"

    '3.等待3秒

    Application.Wait (Now + TimeValue("0:00:5"))

    '4.取得網頁中第1個表格

    Set tbl = ie.document.getElementsByTagName("ul")(5)

    '5.取得表格中所有的列<tr>

    Set trs = tbl.getElementsByTagName("li")

'    '6.取得列中的每一個儲存格內文字<td>如果沒有<td>抓<th>

    For i = 0 To trs.Length - 1

        Set tds = trs(i).getElementsByTagName("div")

        For j = 5 To tds.Length - 1

            Cells(i + 1, j - 4) = tds(j).innertext

        Next

    Next

    Columns("C").Delete

    ie.Quit    

    Rows(1).Insert

    Range("A1") = "股票名稱": Range("B1") = "代號": Range("C1") = "股價"

    Range("D1") = "漲跌": Range("E1") = "漲跌幅(%)": Range("F1") = "開盤"

    Range("G1") = "昨收": Range("H1") = "最高": Range("I1") = "最低"

    Range("J1") = "成交量 (張)": Range("K1") = "時間"

    Columns.AutoFit

End Sub

教學影片分享:



教學論壇:



EXCEL VBA進階班的課程規劃

主要是延伸入門課,延伸資料庫、多工作表、工作簿、網路爬蟲、視覺化報表等應用並與Python程式協同應用
單元01_資料拆解相關(VBA)
單元02_輸入自動化與表單設計
單元03_用ADO匯入與匯出資料庫
單元04_大量工作表合併與分割
單元05_資料查詢(篩選與分割工作表)
單元06_下載網路資料(YAHOO股市)
單元07_活頁簿與檔案處理(工作表分割與合併活頁簿)
單元08_視覺化報表與快速匯入圖片

其他相關學習:
    函數東吳進修推廣部, EXCEL, EXCEL VBA 函數,程式設計,線上教學