- 帖子
- 44
- 主題
- 4
- 精華
- 0
- 積分
- 84
- 點名
- 0
- 作業系統
- winxp
- 軟體版本
- sp2
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2016-10-12
- 最後登錄
- 2021-11-10
|
30#
發表於 2017-6-11 22:49
| 只看該作者
回復 29# jsleee
假設要抓http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170609&type=MS
這網頁的第一個表,從第二列開始抓
(因程式判斷欄位矩陣宣告靠要抓取的第一列有幾個欄位, 若要從第一列開始抓, 你自己要再改一下)
寫一段程式給function需要的資訊,再把function傳回的資料,輸出到excel活頁表,參考如下- Sub main()
- Dim URL$, VV As Boolean, AB() As String
- URL = "http://www.twse.com.tw/exchangeReport/MI_INDEX?response=html&date=20170609&type=MS"
- AB = GetWebTb1(URL, 1, 2, 1, VV)
- If VV = True Then ActiveSheet.Range("A1:E63") = AB
- End Sub
- Private Function GetWebTb1(sURL00$, nTT00%, nRR00%, nCC00%, bRd00 As Boolean)
- '===sURL00 為擷取網址
- '===nTT00 為讀取第幾個Table(從1開始)
- '===nRR00 該Table由第幾列開始讀取(從1開始)
- '===nCC00 該Table由第幾欄開始讀取(從1開始)
- '===bRd00 該資料是否輸出
- Dim nR00%, nC00%, sTemp() As String, oXml As Object, oDoc As Object, oE As Object, tt As Date
- Set oXml = CreateObject("MSXML2.XMLHTTP.6.0")
- Set oDoc = CreateObject("HTMLFile")
- bRd00 = True
- rSend:
- tt = Now() + TimeValue("0:00:20")
- With oXml
- .Open "Get", sURL00, True
- .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
- .send
- On Error Resume Next
- Do While .ReadyState <> 4 Or .Status <> 200
- DoEvents
- If Now > tt Then GoTo rSend
- Loop
- On Error GoTo 0
- oDoc.write .responseText
- End With
- If oDoc.all.tags("Table")(nTT00 - 1) Is Nothing Then bRd00 = False: GoTo Err1
- Set oE = oDoc.all.tags("Table")(nTT00 - 1)
- With oE
- ReDim sTemp(.Rows.Length - nRR00, .Rows(nRR00 - 1).Cells.Length - nCC00)
- For nR00 = 0 To .Rows.Length - nRR00
- For nC00 = 0 To .Rows(nR00 + nRR00 - 1).Cells.Length - nCC00
- sTemp(nR00, nC00) = .Rows(nR00 + nRR00 - 1).Cells(nC00 + nCC00 - 1).innerText
- Next nC00
- Next nR00
- End With
- Err1:
- GetWebTb1 = sTemp
- oXml.abort
- oDoc.Close
- Set oXml = Nothing
- Set oDoc = Nothing
- Set oE = Nothing
- End Function
複製代碼 |
|