(不定期更新)使用VBA解決 excel web 查詢無法匯入、匯入太慢的股市資料

謝謝師傅,我差不多照著您的新版寫法改好了
不過,師傅
這次改版玩,是不是變慢很多了?
peter624 wrote:
改版以後感覺變很不穩 要判斷"無此資料" 以前都不用。 ...(恕刪)


是的,這次網頁改版後(人工查詢)
Your request timed out 、無資料,出現的頻率變很高
網頁不穩的問題,我無能為力

判斷很簡單,在328樓範例中把
redownload:
MsgBox "請稍後再試", vbOKOnly, "Error"
改成
redownload:
GoTo retry2

或是在redownload:下面直接加入您想要跑的程式、訊息



bioleon69 wrote:
這次改版玩,是不是變慢很多了?...(恕刪)


我測試單筆速度沒什麼變化,多筆我沒試
不過,現在想測試也沒辦法,因為今天網頁又在改版中,日期不能選
程式暫時失效無法使用
(2018-03-25 18:57)



會變慢的原因
可能是您用328樓範例的整個程式架構
328樓範只適用單筆下載,2個表格用了3次查詢
想多筆下載沒改寫好至少會多3倍時間

建議用244樓 module2(模組2)中 main 副程式(先刪掉我是本體那一行) 的程式架構來寫


多筆有空我在試看看
也許328樓範例,星期一就不能用了
好險這次我在程式中有加上 on error 除錯,不然只要一開檔案就出錯

snare wrote:
我測試單筆速度沒什麼...(恕刪)


假分工那招,小弟改寫能力不足..
是用之前沒假分工的寫法

之前1600多檔掃完(2個日期比對)
約200多秒
現在要6000秒XD
伺服器的讀取速度跟以前不太一樣了

另外..師傅這邊
SCA_DATE = Split(Replace(Replace(.responsetext, "[", ""), "]", ""), ",")
temp(i) = Replace(SCA_DATE(i), """", "")
處理得太漂亮了..真的好強..哈!!

然後328樓的檔案又不能用了..
(師傅,這個真的好用!)

網頁一直改是怎樣...

這種資料不知道能不能要求證交所整理好給大家下載
慘戶反應的人數多的話...

搞不好是因為這種程式檢索讓網頁伺服器的負載大增所以一直改?
這種工作本來就適合伺服器跑好讓大家下載...
tabsabs wrote:
搞不好是因為這種程式檢索讓網頁伺服器的負載大增所以一直改?
.......(恕刪)


各大型(企業、私人、收費)股票網站,也都是從證交所拿資料的,那種無時無刻即時更新的流量,才嚇人
小小的vba程式沒這個本事啦

從網站原始碼來看,這次主要是改成ajax ,用json回傳資料
好處是可以節省流量、增加反應時間、降低伺服器負載,這是好事,代表有在改善

從人工查詢都會出錯的情況下,可以猜測,會出問題是因為改版沒改好
也許幾天後就正常了


tabsabs wrote:
這種資料不知道能不能要求證交所整理好給大家下載
慘戶反應的人數多的話...
.......(恕刪)


很多網站都有整理好的,還有很多人在賣抓資料的程式
只是要加入會員,而且要很多 $$

慘戶,已經很可憐了,所以才會寫這些免費的範例讓大家參考

不過,雖然範例很多,可是我只有用yahoo股價而已,其它全部沒在用


bioleon69 wrote:
這個真的好用!...(恕刪)


這是投資理財區 Acer_kewei 這位股市高手的表格整理方式
我只是照抄過來,順便加上日期選單而已
snare wrote:
這是投資理財區 Ac...(恕刪)


師傅
table(1).Cells(0).innertext = "無此資料"
連線問題的錯誤
跟本身就是錯誤的股價代號
兩種不同的錯誤

呈現的卻都是
無此資料
對嗎?
bioleon69 wrote:
table(1).Cells(0).innertext = "無此資料"
連線問題的錯誤
跟本身就是錯誤的股價代號
兩種不同的錯誤

呈現的卻都是
無此資料
對嗎?
...(恕刪)


是的,我把這2個錯誤,放在同一類型
您可以自己把msgbox改掉

補充一下,根據今天網站不穩定的觀察,應該是說有3種
一、連線正常,股票代號正確,資料回傳=>沒有資料
二、連線正常,股票代號錯誤,資料回傳=>沒有資料
(因為重試次數改成10次,所以代號錯誤時,程式反應會慢一點)
三、連線突然不正常

一+二,同一種
三,另一種
先mark一下
最近正在渠如何用excel抓資料
請教大神,我想去抓ExcelHome知識樹裡的文章,但寫了Code之後卻發現無法轉碼(不論是UTF8,Big5,gb2312都會有問號),可以請大神幫幫忙嗎,感激不盡

Sub test()

Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")

Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")

With myXML
.Open "GET", "http://club.excelhome.net/tree", False
.send
Debug.Print convertRaw(.responseText)
End With

Set myXML = Nothing
Set myHTML= Nothing

End Sub

Function convertraw(rawdata)
Dim rawstr
Set rawstr = CreateObject("adodb.stream")
With rawstr
.Type = 1
.Mode = 3
.Open
.Write rawdata
.Position = 0
.Type = 2
'‘繁體通常轉成big5就可以了,簡體通常是gb2312
.Charset = "gb2312"
convertraw = .ReadText
.Close
End With
Set rawstr = Nothing
End Function
iamaraymond wrote:
但寫了Code之後卻發現無法轉碼(不論是UTF8,Big5,gb2312都會有問號)...(恕刪)


其實轉換是成功的,是即時運算視窗沒辦法顯示某些編碼的字型,放到表格中是正常的
當需要測試跟編碼有關的程式,有時候不能太相信即時運算視窗所看到的




Sub test()

Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")

Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")

With myXML
.Open "GET", "http://club.excelhome.net/tree", False
.send
Debug.Print convertraw(.responsebody)



Dim temp
temp = Split(convertraw(.responsebody), vbNewLine)
For Each txt In temp
i = i + 1
Cells(i, 1) = txt
Next


End With

Set myXML = Nothing
Set myHTML = Nothing

End Sub

Function convertraw(rawdata)
Dim rawstr
Set rawstr = CreateObject("adodb.stream")
With rawstr
.Type = 1
.Mode = 3
.Open
.Write rawdata
.Position = 0
.Type = 2
'‘繁體通常轉成big5就可以了,簡體通常是gb2312
.Charset = "gbk"
convertraw = .ReadText
.Close
End With
Set rawstr = Nothing
End Function



您要抓的那些網頁發言的資料,建議用砍站軟體會比較方便
下載後,每一則討論,每頁都會整理好,查閱起來也比較容易
用vba反而麻煩
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 145)

今日熱門文章 網友點擊推薦!