返回列表 上一主題 發帖

[發問] 無法用外部資料匯入的網站能用VBA讀取資料嗎?

[發問] 無法用外部資料匯入的網站能用VBA讀取資料嗎?

近日在做一些追縱研究,需要定期到下面網站讀取所有公司的名稱、地址和地址類型
https://eservices.customs.gov.hk/MSOS/wsrh/001s1?searchBy=B

我試過用「外部資料匯入」和錄製巨集來處理,但EXCEL看來讀不到那些TABLE的資料。
請問VBA能夠處理嗎?謝謝大家。

  1. Sub GetData()


  2. URL = "https://eservices.customs.gov.hk/MSOS/wsrh/001s1?searchBy=A"

  3. With CreateObject("InternetExplorer.Application")
  4.   .Visible = True     '  是否顯示 IE
  5.   .Navigate URL

  6. Do While .ReadyState <> 4 Or .Busy

  7. DoEvents

  8. Loop

  9. xlHtm = .Document.body.innerHTML
  10. End With

  11. End Sub
複製代碼
我試了用CREATEOBJECT,但有些資料多過一頁時,請問如何轉頁?

TOP

本帖最後由 小俠客 於 2014-6-10 12:08 編輯

謝謝GBKEE大大,好像已經可以了!
太利害,我再試試看。
代碼有很多看不懂的東西,希望仔細看後能弄清楚當中原理,謝謝。

TOP

本帖最後由 小俠客 於 2014-6-10 14:19 編輯

對不起,關於GBKEE大分享的CODING,我有些疑問:

1) "FM20.DLL" 是Microsoft Forms 2.0 Object Library ,但如果我想了解它的功能和使用方便,應該如何入手?

2) "grid-table-pubSrch_center"、"next_grid-table-pubSrch",這些keyword是如何找出來?我在原始檔找不到......

3) 我對CreateObject("InternetExplorer.Application")的操作不了解,有沒有相關資料可以參考?

謝謝大家
謝謝。

TOP

回復  小俠客
1) "FM20.DLL" 是Microsoft Forms 2.0 Object Library ,但如果我想了解它的功能和使用方便 ...
GBKEE 發表於 2014-6-12 08:33




有點弄不清楚,版大可否簡介「Microsoft Forms 2.0 Object Library」在此程式的作用?
是把網頁上的資料當成FORM來讀取嗎?

TOP

回復  小俠客





檔案下載後,如圖示匯入 表單
GBKEE 發表於 2014-6-14 16:47



    經過數天的研究,我開始有點了解
但我對大大之前提供的代碼仍然不太清晰,可以請你稍作解譯嗎?
  1.         Do
  2.             Set A = .Document.getElementsByTAGName("TD")
  3.         Loop Until Not A Is Nothing And A.Length = 84
複製代碼
我查到getElementsByTAGName("TD")是指「返回帶有指定標簽名的對象集合」
即是A = 「返回帶有TD標簽名的對象集合」
A.Length 是指這個集合的總數
但我參考 「Private Sub 網頁的元素()」
我發現只有54個TD ,為什麼大大會寫84?(A.length真的是84,只是我不明白為何是84,而且如何得知是84)

另外,如果我們是希望從"TD"集合中找出 A(i).ID = "grid-table-pubSrch_center"
  1.         Do
  2.             Set A = .Document.getElementsByTAGName("TD")
  3.         Loop Until Not A Is Nothing And A.Length = 84
複製代碼
可不可以寫成
  1. Set A = .Document.getElementsByTAGName("TD")
複製代碼
因為我不太明白這個LOOP的作用
謝謝大大指教

TOP

回復  小俠客 Set A = .Document.getElementsByTAGName("TD")
不放在 Do   Loop 迴圈也可以,
但因網頁資料 ...
GBKEE 發表於 2014-6-20 21:03


原來如此,因為我是用「逐行執行」的方式研究代碼,所以比較沒有這個問題,實際運行確需要作這個checking。
那麼a.length = 84又是甚麼意思?

A = 「返回帶有TD標簽名的對象集合」
A.Length 是指這個集合的總數
但我參考 「Private Sub 網頁的元素()」
我發現只有54個TD ......

TOP

        靜思自在 : 靜坐常恩己過、閒談莫論人非。
返回列表 上一主題