返回列表 上一主題 發帖

[發問] 請教網頁捉取的問題? CreateObject("msxml2.xmlhttp") 的問題?

回復 14# GBKEE


    謝謝 版主  從 中學到很多。

TOP

回復 15# GBKEE


    謝謝 娰主 程式 , 學習中 。
googs.jpg

TOP

回復 14# GBKEE
  1. Sub GetIncome() '取損益表(年表)網頁
  2. Dim Url, HTMLsourcecode, GetXml, TableG, i, j
  3. Set HTMLsourcecode = CreateObject("htmlfile")
  4. Set GetXml = CreateObject("msxml2.xmlhttp")
  5. Url = "http://kgieworld.moneydj.com/z/zc/zcq/zcqa/zcqa_2330.djhtm"
  6. With GetXml
  7. .Open "GET", Url, False
  8. .Send
  9. HTMLsourcecode.body.innerhtml = .Responsetext
  10. Set TableG = HTMLsourcecode.getelementsbyclassname("table-row")
  11. '***網頁的編碼**********************************
  12. '<div class="table-row">   為所要的資料 的網頁元素
  13. '<span class="t2 table-cell">期別</span>
  14. '<span class="t2 table-cell">2020</span>
  15. '<span class="t2 table-cell">2019</span>
  16. '<span class="t2 table-cell">2018</span>
  17. '<span class="t2 table-cell">2017</span>
  18. '<span class="t2 table-cell">2016</span>
  19. '<span class="t2 table-cell">2015</span>
  20. '<span class="t2 table-cell">2014</span>
  21. '<span class="t2 table-cell">2013</span>
  22. '</div>************************************
  23. For i = 0 To TableG.Length - 1
  24.     For j = 0 To TableG(i).all.tags("span").Length - 1
  25.        Cells(i + 1, j + 1) = TableG(i).all.tags("span")(j).innertext
  26.     Next j
  27. Next i
  28. End With
  29. Set HTMLsourcecode = Nothing '釋放記憶體
  30. Set GetXml = Nothing
  31. End Sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
複製代碼
請教 版大 我 office 2007 版 測試 程式
Set TableG = HTMLsourcecode.getelementsbyclassname("table-row")
這行會誤,是否版本的問題
謝謝 版大
Image 7.jpg

TOP

回復 14# GBKEE


    這次網頁改版,抓取的有的股票行數不同,像金融股那一段取B67欄就不在那行,就嘗試用find ,全部上市可以跑完。

TOP

回復 20# GBKEE


    謝謝 版主,我執行程式沒停止,用 debug 測試,在這段裡迴圈
  1.        Do  '  程式運行速度快用迴圈,確保TableG物件下載完整
  2.             Set TableG = HTMLsourcecode.all.tags("div")
  3.             DoEvents
  4.             '**   "JScriptTypeInfo"  可在 區域變數視窗 查看
  5.             '** 或是   Debug.Print TypeName(TableG) 得知
  6.             N = N + 1
  7.             
  8.             Debug.Print TypeName(TableG) & N
  9.         Loop Until TypeName(TableG) = "JScriptTypeInfo"
複製代碼
Image 1.jpg

TOP

回復 22# GBKEE


謝謝 版大
F8 執行

Image 1.jpg
2022-1-12 15:46
物件名稱不一樣
Object/DispHTMLElementCollection

TOP

回復 22# GBKEE


    謝謝 版大 改過就可以了, 從中學習很多
  1.        Do  '  程式運行速度快用迴圈,確保TableG物件下載完整
  2.             Set TableG = HTMLsourcecode.all.tags("div")
  3.             DoEvents
  4.             N = N + 1
  5.             '**   "JScriptTypeInfo"  可在 區域變數視窗 查看
  6.             Debug.Print TypeName(TableG) & N
  7.             '** 或是   Debug.Print TypeName(TableG) 得知
  8. '        Loop Until TypeName(TableG) = "JScriptTypeInfo"
  9.         Loop Until TypeName(TableG) = "DispHTMLElementCollection"
複製代碼

TOP

        靜思自在 : 願要大、志要堅、氣要柔、心要細。
返回列表 上一主題