標題:
[發問]
如何快速將網頁資料抓到excel裡
[打印本頁]
作者:
paul3063
時間:
2017-12-17 02:59
標題:
如何快速將網頁資料抓到excel裡
http://www.twse.com.tw/zh/page/trading/exchange/STOCK_DAY_AVG.html
如何快速將網頁資料抓到excel裡
AB欄位分別是日期跟收盤價
證交所的網址如上
必須一個月一個月去入查詢完後貼到EXCEL裡
請問有什麼方法可以快速得到左邊的結果
日期 收盤價
106/01/03 84.3
106/01/04 84.2
106/01/05 84
106/01/06 83.8
106/01/09 83.5
106/01/10 84
106/01/11 84.2
106/01/12 84.3
Download Page Link
https://www.sendspace.com/file/09cahu
作者:
Scott090
時間:
2017-12-19 17:24
回復
1#
paul3063
試試看
Sub TWSEtest()
Dim sh As Worksheet
Dim iDate$, stock$, yYear$, mMonth$, URL$
Dim arDATA(), Table
Dim i%, j%
Set sh = Sheets("工作表1")
sh.Activate
Cells.Clear
stock = "2330" '設定代號
yYear = "2017" '設定年度
mMonth = "01" '設定月份
iDate = yYear & mMonth & "01"
URL = "http://www.twse.com.tw/exchangeReport/STOCK_DAY_AVG?response=Html&date=" & iDate & "&stockNo=" & stock
With CreateObject("InternetExplorer.Application")
.Visible = False ' 不顯示 IE
.Navigate URL
Do While .readyState <> 4
DoEvents
Loop
Set Table = .document.getElementsBytagname("table")(0)
With Table
ReDim arDATA(.Rows.Length, .Rows(1).Cells.Length)
For i = 0 To .Rows.Length - 1
For j = 0 To .Rows(1).Cells.Length - 1
On Error Resume Next
arDATA(i + 1, j + 1) = .Rows(i).Cells(j).innertext
Next
Next
End With
sh.Cells(1, 1).Resize(UBound(arDATA), UBound(arDATA, 2)) = arDATA
[A1].Select
.Quit '關閉瀏覽器
End With
Set Table = Nothing
Set sh = Nothing
Erase arDATA()
End Sub
複製代碼
作者:
GBKEE
時間:
2017-12-19 18:34
本帖最後由 GBKEE 於 2017-12-21 17:37 編輯
回復
1#
paul3063
[attach]28145[/attach]
試試看
Option Explicit
Sub Ex_日收盤價及月平均收盤價()
Dim oXmlhttp As Object, oHtmldoc As Object, surl, i, E, r As Double, c As Double
Dim StockNo As String, xday As String, xRow As Integer, Day1 As Date, Day2 As Date, xTime As Date
StockNo = [A2]
Day1 = ActiveSheet.[B2]
Day2 = ActiveSheet.[C2]
For i = 0 To DateDiff("m", Day1, Day2)
xday = Format(DateAdd("m", i, Day1), "yyyymmdd")
Set oXmlhttp = CreateObject("msxml2.xmlhttp")
Set oHtmldoc = CreateObject("htmlfile")
surl = "http://www.twse.com.tw/exchangeReport/STOCK_DAY_AVG?response=html&date=" & xday & "&stockNo=" & StockNo
With oXmlhttp
.Open "Get", surl, False
.Send
If InStr(.responseText, "很抱歉,沒有符合條件的資料!") Then
MsgBox "很抱歉,沒有符合條件的資料!" & vbLf & "請檢查 股票代號"
Exit Sub
ElseIf InStr(.responseText, "查詢日期小於88年1月5日,請重新查詢") Then
MsgBox "查詢日期小於88年1月5日!" & vbLf & "請檢查 起始日期"
Exit Sub
ElseIf InStr(.responseText, "查詢日期大於今日,請重新查詢") Then
MsgBox "查詢日期大於今日" & vbLf & "請檢查 終止日期"
Exit Sub
End If
oHtmldoc.write .responseText
End With
With oHtmldoc
Set E = .all.tags("table")(0)
With ActiveSheet
If i = 0 Then .UsedRange.Offset(2).Clear
xRow = .Cells(Rows.Count, "a").End(xlUp).Row + IIf(i = 0, 1, 0)
For r = IIf(i = 0, 0, 2) To E.Rows.Length - 2 '-1 可顯示月平均收盤價
For c = 0 To E.Rows(r).Cells.Length - 1
.Cells(xRow + r + IIf(i > 0, -1, 0), c + 1) = E.Rows(r).Cells(c).innertext
Next
Next
End With
End With
Set oXmlhttp = Nothing
Set oHtmldoc = Nothing
Application.StatusBar = "**** " & Format(DateAdd("m", i, Day1), "ee/mm") & " 載完畢 *****"
'**** 股市營業時間有流量管制 **
'xTime = Time + #12:00:09 AM# '間隔 10秒
'Do : DoEvents: Loop Until Time > xTime
'**********或是下式**********************
'Application.Wait Now + #12:00:09 AM#
'********************************
Next
MsgBox "ok"
End Sub
複製代碼
作者:
paul3063
時間:
2017-12-22 22:08
回復
3#
GBKEE
GBKEE大,可以了,萬分感謝,您真的是太強了
另外想問一下怎樣用QueryTable來抓取網頁資料
GOOGLE找到一題,您之前回答過的問題
http://forum.twbts.com/viewthread.php?tid=3218
可是好像無法執行,不知道那邊出了問題
奇摩網址問題?
如果用證交所的可以嗎
作者:
paul3063
時間:
2017-12-22 22:11
回復
2#
Scott090
Scott090大,
您的這份巨集好像不行,
畫面出現
106年01月 2330 台積電 日收盤價及月平均收盤價
日期
106/01/03
106/01/04
106/01/05
106/01/06
106/01/09
106/01/10
106/01/11
106/01/12
106/01/13
106/01/16
106/01/17
106/01/18
106/01/19
106/01/20
106/01/23
106/01/24
作者:
Scott090
時間:
2017-12-23 06:31
回復
5#
paul3063
請在模組最上方加入 Option 如下:
Option Explicit
Option Base 1
Sub TWSEtest()
.....
end sub
作者:
Scott090
時間:
2017-12-23 06:36
回復
6#
Scott090
這是跑出的結果
[attach]28160[/attach]
作者:
paul3063
時間:
2017-12-23 14:01
回復
7#
Scott090
Scott090大,可以了,謝謝。
可是我將裡面代碼作小修正,卻又不行了,
您可以再幫我看一下嗎?
' stock = "2330" '設定代號
' yYear = "2017" '設定年度
' mMonth = "01" '設定月份
stock = Range("A1")
yYear = Range("B1")
mMonth = Range("C1")
作者:
paul3063
時間:
2017-12-23 14:09
回復
6#
Scott090
Scott090大,
剛剛發現是Cells.Clear這段的問題,這樣應該是沒有問題了,謝謝您。
作者:
paul3063
時間:
2017-12-23 14:24
回復
7#
Scott090
Scott090大,
剛剛才發現您的方法只能下載單月份的,我要的應該是GBKEE大的那份答案結果,可以好幾個月合併的。
作者:
Scott090
時間:
2017-12-24 06:40
回復
10#
paul3063
得到核心方法解答後,需自我學習如何套用,有問題再到論壇討論
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)