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


感謝樓主的回覆,慢慢有些內容被點醒了解了。

snare wrote:
這2個方式,分別跑到2個網址去處理
從原始碼中可知...(恕刪)


似乎有點懂了。應該就是HTML和Javascript的差別。
每次遇到這種Form,就是有部份不太懂,但也不知道要去怎麼google關鍵字

(1) 按enter的網址
請問像這 Form 並沒有 submit (應該沒有吧),最多只看到input 輸入股票代碼,但看不到有哪個指令是將 Form 的資料送到伺服器。查詢 search 和 input_stock_code 沒注意到有類似submit的Function,請問像這類是怎麼執行的?

(2) 滑鼠點擊的網址
經樓主提示 雖然了解滑鼠點擊的網址是經由 Function query。
請問是否可以經由 Event Listener Breakpoints 的設定,去主動查詢是跑到 Function query?

是有設定 Mouse-->Click,但每次才剛點擊輸入股票代碼的input就中斷停止在那。再按F8繼續執行,但輸入股票代碼input就沒辦法跑出搜尋到的股票代碼。

(3)
請問Function loaded()會是在什麼樣的形況下才會執行到這行?

(4)
使用Chrome瀏覽器,點擊每一行的原始碼,後面都會跑出反白的文字 == $0
這代表什麼意思嗎?

(5)
snare wrote:
不是的,因為下載的是"標準的html表格"
沒有程式碼,很乾淨的html table
就像手動在網頁選好資料,再複製、貼上一樣...(恕刪)


樓主講解得很詳細,了解了。

不過直接在Excel點擊button(HTML)好像都沒辦法執行。
但如果在程式碼直接按執行會成功,但好像就成功那麼一次,之後還是沒辦法執行。
如果是直接一路逐行F8 debug 執行,好像幾乎都會成功。(好像也有失敗過)

每次執行完,資料沒下載下來,就會出現如下 "Class Worksheet 的 PasteSpecial 方法失敗"
請問樓主會知道是什麼原因造成OK的程式,但又不知道在什麼情形下又不能下載?
justinyutw wrote:
(1) 按enter的網址
請問像這 Form 並沒有 submit (應該沒有吧),最多只看到input 輸入股票代碼,但看不到有哪個指令是將 Form 的資料送到伺服器。查詢 search 和 input_stock_code 沒注意到有類似submit的Function,請問像這類是怎麼執行的?

(2) 滑鼠點擊的網址
經樓主提示 雖然了解滑鼠點擊的網址是經由 Function query。
請問是否可以經由 Event Listener Breakpoints 的設定,去主動查詢是跑到 Function query?

是有設定 Mouse-->Click,但每次才剛點擊輸入股票代碼的input就中斷停止在那。再按F8繼續執行,但輸入股票代碼input就沒辦法跑出搜尋到的股票代碼。

(3)
請問Function loaded()會是在什麼樣的形況下才會執行到這行?
...(恕刪)


(1)是的,沒有,程式碼在別的地方,我是直接跳到結果抓圖

(2)輸入後先跑到這個網頁查所有的股票代號(請參考533樓)
http://www.tpex.org.tw/web/inc/search_stk_reg_all.php?
滑鼠點擊後,再跑到第2個網址回傳資料

Event Listener Breakpoints 可以啊…
(建議您可以改用Fiddler找網址會比較容易些)






(1)+(2)+(3) 怎麼執行的,這是網頁程式設計上的問題,說明起來太艱深難懂
不好意思,我不知道怎麼用簡單的方式解釋

justinyutw wrote:
(4)
使用Chrome瀏覽器,點擊每一行的原始碼,後面都會跑出反白的文字 == $0
這代表什麼意思嗎?
...(恕刪)


請看google的說明
https://developers.google.com/web/tools/chrome-devtools/console/command-line-reference?utm_source=dcc&utm_medium=redirect&utm_campaign=2016q3#0_-_4



justinyutw wrote:
不過直接在Excel點擊button(HTML)好像都沒辦法執行。
但如果在程式碼直接按執行會成功,但好像就成功那麼一次,之後還是沒辦法執行。
...(恕刪)

剛剛試了一下223樓的範例,隨機跑了快100個"上櫃股票代號",確定是正常的



您是不是用了上市股票代號去測試,要上櫃的才行

也許是您測試中斷太久被www.tpex.org.tw停止回應
或是您測試時查詢間隔太短,暫時被擋ip
擋ip,請看266樓
www.tpex.org.tw 部份網站資料有限制,查太快是會檔ip的
可參考170樓加入自動重新下載功能
或是在這段程式碼後,多加上msgbox做提示
checkid:
If Err.Number <> 0 Then
Debug.Print Err.Description
End If
msgbox ("網路忙線中")
End Sub

justinyutw wrote:
每次執行完,資料沒下載下來,就會出現如下 "Class Worksheet 的 PasteSpecial 方法失敗"
請問樓主會知道是什麼原因造成OK的程式,但又不知道在什麼情形下又不能下載?
...(恕刪)


clipboard 要有東西,貼上才不會出錯
(也許您暫時被tpex擋ip了,所以我才會在這個範例中加入on error 避免沒資料,造成程式當掉)

但不是什麼都能放入clipboard
放入clipboard 之前先用 debug.print .responsetext,測試一下
只要除錯視窗有東西,就沒問題


但是有時候因為CreateObject("WinHttp.WinHttpRequest.5.1")的關係
傳回值
debug.print .responsetext 會出現不正確的定位項
需要先轉換一次才行
debug.print convertraw(.responsebody)

或是改用其它的xml物件,例如:CreateObject("msxml2.xmlhttp")
(通常用.open "GET" 方式的網站 ... 都沒問題,post不一定)





這是223樓的範例網站www.tpex.org.tw
在輸入上櫃股票代號時會先檢查股票代號、名稱
這個範例就是怎麼把檢查結果先抓出來
還有如何把unicode轉成中文(利用html物件)(可回頭看看269樓,利用html轉url的方式)




下載後會是unicode



利用htmlfile來轉碼




雖然轉回值是json,但輸入完整股票代號後,文字很短
只需使用split()、mid()... 等等文字函數就可簡單處理

程式碼
(點下可看大圖)


請問 Snare 大,
當抓下的資料只能存放在一個Cell 裡,要如何切成像網路上的表格模式?
不曉得您先前是否有放出來過?
例如:
http://stockchannel.sinotrade.com.tw/z/zc/zcq/zcq0.djhtm?b=Q&a=1101

謝謝!!
cji3cj6xu6 wrote:
當抓下的資料只能存放在一個Cell 裡,要如何切成像網路上的表格模式?
不曉得您先前是否有放出來過?
例如:
http://stockchannel.sinotrade.com.tw/z/zc/zcq/zcq0.djhtm?b=Q&a=1101 ...(恕刪)


請參考21樓範例

利用其它範例的剪貼簿方式放入表格
Snare 大,謝謝!!

立即前往21F了解,不懂的地方再跟您請教
Snare 大,

昨天再認識一次21F 裡您提到的Yahoo 資料 ,發現自己少了那3行避免抓到暫存資料,
補上後再看一次Yahoo 資料

table.length : 算出表格共有2格
table(i).cells.length 算出每列表格有12欄

但目前這個網頁 http://stockchannel.sinotrade.com.tw/z/zc/zcq/zcq0.djhtm?b=Q&a=1101,

table.length : 算出表格共有3格
table(i).cells.length 算出每列表格有3欄

不曉得有何方法切開成9欄的網頁格式?

cji3cj6xu6 wrote:
但目前這個網頁 http://stockchannel.sinotrade.com.tw/z/zc/zcq/zcq0.djhtm?b=Q&a=1101,

table.length : 算出表格共有3格
table(i).cells.length 算出每列表格有3欄

不曉得有何方法切開成9欄的網頁格式?

...(恕刪)


以您問的這個網址
我給您的是99%的程式碼,剩下的只需要改幾個字
仔細看21樓內文,不要只是複製程式碼
有空其它內文也看一下,例如:21樓~24樓

21樓



剪貼薄

了解,謝謝Snare大費心指導,祝順心~
謝謝Snare大提醒,
原來是我的code 有動到,才會一直抓錯地方,
不好意思,一直打擾~~
關閉廣告
文章分享
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 144)

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