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 函數,程式設計,線上教學

    2021年1月19日 星期二

    EXCEL VBA大數據分析視覺化程式設計

    用EXCEL VBA做大數據分析視覺化程式設計教學心得分享

    本學期應邀回母校台師大開課課程主要是:
    用EXCEL VBA做大數據分析視覺化程式設計

    另一個母校,東吳大學也邀請我開課,但限於自己的時間無法排出適合的時間,
    於是系主任便推薦我開設遠距課程於是,
    便有了可以在台師大上課,並將上課錄影除了提供上課學生複習,
    也可以將後製後的影片,提供東吳的遠距課程的想法,
    這樣我只要認真地把一次課程作法,就可以讓兩邊的學生都學習的好辦法。

    於是開學後,台師大受限電腦教室,選修人數只有50人,加上加選5人,
    有55位學生,幾乎是秒殺,至於東吳遠距課程,沒有這樣的限制,
    所以選課人數近百人,有95位選修。

    一、課程大綱:

    期中前,主要從EXCEL高階函數巨集錄製VBA程式設計,
    資料來源為政府開放資料,配合樞紐分析表。

    期中後,網路爬蟲+樞紐分析到視覺化圖報表,用EXCEL內建功能與錄製巨集寫爬蟲,
    無法抓取資料則用IE物件,將IE瀏覽器嵌入EXCEL VBA程式中,只要能連結的網頁,單可以下載裡面的資料。



    課程進行中提供雲端講義,裡面有說明、畫面與老師自己寫的程式碼,並隨課全程錄影,
    後製後上傳YOUTUBE,建立播放清單,直接件給學生複習與學習。
    建立一個GOOGLE論壇,只有學生可以加入,
    課後會將上課的YOUTUBE影片建立播放清單,並貼到論壇,
    好處就是會自動轉信給學生,這樣我就不用一個一個的郵寄了,
    用了超過十年覺得沒什麼問題,只是雖是論壇,
    但討論的介面做的很不好,最好用的還是分享上課影片清單。



    二、修課人數/學院分布




    三、期中專題作業






    四、期末專題作業












    五、本學期授課心得:

    1.兩學分真的有點趕,因此輔以影音錄製與雲端講義,對認真學習學生幫助很大。
    2.期中專題有範圍,但許多學生都能加入自己的需求和想法,加上EXCEL容易上手,雖說需要撰寫VBA程式,但因為懂得錄製巨集與修改的方式,都能完成理想專題。
    3.期末專題為難度很高的網路爬蟲+製作圖表,但結果超過預期的好,可見學生接受度很好,以學生回饋意見可知,上課錄影可重複學習備查,與雲端講義助益很大。
    4.遠距學習(東吳)結果因為有影音與雲端輔助,成果不遜於實體上課。


    非資訊背景教程式設計

    非資訊卻講程式設計二十一年(89年巨匠教VB)
    比較沒包袱,能從非資訊角度看學習與應用
    重視實作,很多人看的懂書上寫的但寫不出程式
    程式寫作要會寫,還要熟練,更需要完全正確(99分程式還是無法執行)
    教學的核心都在如何幫助學生學會寫程式。
    從EXCEL函數開始,再學習錄製巨集,再慢慢進入VBA程式設計的世界

    如何幫學生寫出又快會好又正確程式

    1.所有程式都是自己預先多次撰寫,用自己的寫作風格撰寫,不要求學生有標準答案,可以用自己的方式與邏輯寫程式。
    2.提供雲端即時講義,取名雲端白板,有解答程式畫面結果與文字敘述。
    3.隨課錄影,並課後上傳YOUTUBE播放清單用用GOOGLE論壇分享。
    4.期中報告以開放資料為資料來源,用EXCEL樞紐分析圖表、函數、巨集與VBA完成專題。
    5.期末報告以網路爬蟲取得資料(GET與POST),用EXCEL製作圖表與VBA完成專題。

    Pyhton V.S. VBA

    自己也教Pyhton發現還是比VBA來的困難
    1.安裝環境
    2.有EXCEL可以存資料,甚至當資料庫
    3.有錄製巨集可以產生不會寫的程式
    4.樞紐分析 vs Pandas
    5.圖表 vs Matplotlib
    入門的學生與非資訊相關科系,建議可以先從學習VBA設計下手

    第14次上課教學影片分享:

    (期末專題作業說明&全省氣溫改為跨工作表與物件的使用&跨工作表說明與用IE物件)


    教學論壇:


    EXCEL VBA進階班的課程規劃

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

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