【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼




Excel VBA網路爬蟲的資料量大,勢必要有相對應的容納位置。本文先將程式改成單純取得網頁表格,再介紹新增工作表的代碼,準備將資料放到規劃好的地方。

一、分析網頁原始碼

清華大學圖書館「2019年中文圖書借閱排行榜」的網頁原始碼,第260行代碼開始是表格資料,以<table>開始,「<tr></tr>」 各是一行網頁內容,第一行是標題,有三項「<th></th>」欄位, 第二行開始,每行「<tr></tr>」都有三項<td></td>資料,於1319行資料後,最後以「</table>」結束,以上大略是這張網頁的主要內容架構。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第1張

二、毋須網頁格式

根據網頁特性,編寫VBA程式碼如圖所示。因為不再需要超連結了,只要純粹資料,所以增加一行程式碼:「.WebFormatting = xlWebFormattingNone」,毋須取得網頁的資料格式。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第2張

三、取得網頁表格

執行巨集「DownloadWeb」。取得的資料如圖所示,第一行是報表(表格)名稱、第二行的標題欄、第三行開始的資料行,圖片是排行到第10名,在Excel是從「A1」到「C12」,原始網頁排行到200名,而且第200名有10名,其他名次有些只有1名,有些也是兩名以上,所以在Excel是從從「A1」到「C211」,總共211行。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第3張

四、三個年度排行榜

想取得三個年度的中文圖書排行版數據,先彙總相關資料如圖所示。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第4張

五、新增模組

Excel手工新增工作表雖然操作簡單,但每次還是要花些時間,在此介紹VBA程式快速新增多張工作表。首先,於VBA界面中選擇「插入」、「模組」。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第5張

六、WorksheetsAdd指令

於「Module2」編寫巨集程式碼「WorksheetsAdd」。其中「ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)是新增工作表的標準語法,參數「after」意思是在此工作表之後插入新的工作表,「Worksheets.Count 」是計算此活頁有多少工作表,因此「after:=Worksheets(Worksheets.Count)」綜合起來就是在最後一張表的後面新增工作表。「ActiveSheet.Name = “2014”」作用是為新增的工作表命名,注意到「sheets.Add」方法會把以新增的工作表作為當前操作中的工作表,也就是「ActiveSheet」。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第6張

七、新增工作表巨集

執行「WorksheetsAdd」巨集。從圖片視窗可以看兩個模組(Module1 及Module2)分別編寫了兩個獨立的巨集,這一節的範例會是先執行「Module2」的「WorksheetsAdd」,然後再執行「Module1」的「DownloadWeb」,亦即先新增加工作表,再分別取得網頁資料。

【Excel VBA網路爬蟲】只取得網頁表格和新增特定名稱工作表的程式代碼 VBA網路爬蟲 第7張

VBA新增工作表配合網路爬蟲

熟悉Excel的讀者,操作新增工作表應該很快。不過如果是利用Excel取得網頁資料,重點不僅僅以Excel形式瀏覽網頁,關鍵在於將所取得資料皆為電子數據形式同時儲存,在累積一定數量之後,便可以進一步作大數據統計分析。以這裡的圖書館借閱排行榜為例,有好幾個年度、好幾種類型,這個情況下,想要將資料分別下載於不同工作表,一張一張手工新增顯然相當麻煩,勢必要以程式代碼方式批量進行,這一節所分享的,便是Excel VBA如何新增工作表的基礎。




當前文章延伸閱讀:
VBA網路爬蟲