Excel VBA 網路資料蒐集 完整教學:
今天想來複習一下用VBA下載網路檔案的語法
於是想到了從公開資訊觀測站自動下載年報檔案
只要在Excel的A3儲存格輸入股票代號
接著從A6開始往下輸入要抓的年度即可
語法:
Sub getReportA()
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
Dim oStream As Object
Set oStream = CreateObject("ADODB.Stream")
stockno = [A3]
LR = Cells(Rows.Count, "A").End(xlUp).Row
With myXML
For i = 6 To LR
Application.StatusBar = "抓取" & Cells(i, "A") & "年報中..."
Cells(i, "B").Hyperlinks.Delete
Application.Wait Now() + TimeValue("00:00:03")
.Open "GET", "http://doc.twse.com.tw/server-java/t57sb01?step=1&colorchg=1&co_id=" & stockno & "&year=" & Cells(i, "A") & "&mtype=F&", False
.send
myHTML.body.innerHTML = .responseText
Set myLinks = myHTML.getElementsByTagName("a")
For Each myLink In myLinks
If myLink.innerText Like "*F04*" Then
myLink2 = myLink.innerText
Exit For
End If
Next
If myLink2 = "" Then Cells(i, "B") = "檔案不存在": GoTo myNext
.Open "POST", "http://doc.twse.com.tw/server-java/t57sb01", False
.send "colorchg=1&step=9&kind=F&co_id=" & stockno & "&filename=" & myLink2
If Right(myLink2, 3) = "pdf" Then
thePDF = [B3] & "\" & stockno & "_" & Cells(i, "A") & ".pdf"
myLink3 = "http://doc.twse.com.tw" & Split(Split(Split(.responseText, "a href")(1), ">")(0), "'")(1)
.Open "GET", myLink3, False
.send
ElseIf Right(myLink2, 3) = "doc" Or Right(myLink2, 3) = "zip" Then
thePDF = [B3] & "\" & stockno & "_" & Cells(i, "A") & Right(myLink2, 3)
.Open "POST", "http://doc.twse.com.tw/server-java/t57sb01", False
.send "colorchg=1&step=9&kind=F&co_id=" & stockno & "&filename=" & myLink2
End If
If Dir(thePDF) <> "" Then Kill thePDF
oStream.Open
oStream.Type = 1
oStream.Write .responseBody
oStream.SaveToFile (thePDF)
oStream.Close
With Sheets("工作表1")
.Hyperlinks.Add Anchor:=.Cells(i, "B"), Address:=thePDF, TextToDisplay:=Right(myLink2, 3)
End With
myNext:
Next i
End With
Application.StatusBar = "抓取完畢"
Set myXML = Nothing
Set oStream = Nothing
End Sub
您好,感謝您提供範例讓我學習可以用excel抓取網站的資料。但可能因為我能力不足,如果一個網站的資料有很多要輸入的欄位範圍才能查出資料,要怎樣用excel vba查詢呢?
回覆刪除https://portal.sw.nat.gov.tw/APGA/GA30
例如政府有一個進出口資料的查詢
其設定的分類有
1.進出口別 -->要點選查詢進口還是出口資料,假設要選擇出口資料
2.資料週期 -->要點選查詢要按年還是按月,假設要點選按月
3.資料期間 -->要用輸入的方式輸入起始與終止年月份, 例如 "110" 年"1"月, "111"年"1"月
4.貨品別,點選類別後再輸入貨品號列,假設點選"指定貨品號列",輸入貨號 "847950"
5.國家地區別。要點選類別後,再輸入國家。假設點選"全部國家"
6.統計值,已點選類別,假設點選"金額美金"(原設定值)
7.欄位順序,假設不調整。
就可以查詢出某個年度、月份、對國外地區、847950項的出口資訊
但是因為有太多不同類別的輸入方式,所以不知道要如何設定"點選","選擇月份" "輸入文字" "輸入數字"並存的自動程式查詢方式。
我目前大概只會使用VBA查詢特定頁面有表格的字度抓取而已的程度(如上樂透網站抓號碼),再進一階就不會了。不知道能否像您請教。