Board logo

標題: [請益] 使用EXCEL連結IE抓取網頁資料的問題 [打印本頁]

作者: sasho    時間: 2010-6-25 19:45     標題: [請益] 使用EXCEL連結IE抓取網頁資料的問題

本帖最後由 sasho 於 2010-6-25 19:47 編輯

目前正在學習使用vba連結IE抓取外部資料

但在學習上遇到點問題,想上來請教各位前輩,請大家幫忙,謝謝!

1. 不曉得MICROSOFT HTML object libary應該要去哪裡查詢呢?
    因為有許多屬性或是用法上的問題不清楚,但卻又不知道有哪邊可以查詢,可以請有經驗的人指導一下嗎?

2. 如果我想在寫程式的過程中利用類似msgbox的指令去,輸出我抓到的IE.document不曉得可以用什麼方法呢?
    因為想針對網頁中的table抓,但一個網頁有好多個table,所以常常會造成後續的指令的錯誤,所以想如果可以利用類似msgbox的功能來做偵錯!

      
謝謝大家!
作者: Hsieh    時間: 2010-6-26 23:30

回復 1# sasho

設定引用項目的目的,在於讓EXCEL VBA 認識其他應用程式物件
所以當你勾選該引用項目後
在程式區段宣告變數的型態完成後
便可有程式碼屬性自動完成的清單供選取
如:
若未設定引用項目MICROSOFT HTML object libary時
執行時
Dim MyIE As InternetExplorer這行就會報錯
因為這時EXCEL並不認識InternetExplorer
設定引用項目MICROSOFT HTML object libary後才能正確宣告此物件
那麼如何知道該物件屬性項目呢?
當輸入MyIE.時就能出現該物件底下可能使用的屬性清單了
就跟原本EXCEL物件當我們以正確行式輸入物件然後就會出現清單選擇了
至於第2點,這就要對HTML語法來認識了
TABLE在網頁中似乎是沒有一個ID供我們來明確指定到我們需要的表格(這我也不確定)
但是寫程式有一個共通的原則就是
從變數的資料內容來尋找規則
再依據這些規則達到分類
以我寫過的經驗
因為表格通常有標題列
那就以這些文字來做判斷
看是否已經在這表格上
例如:
有一表格
日期        數量        金額
為標題文字
那麼這TABLE的innertext屬性值就可以用是否為Like "日期        數量        金額*"
做為判斷依據
Dim MyIE As InternetExplorer
with MyIE
      Set MyDoc = .Document
      With MyDoc
       For i = 0 To MyDoc.all.Length - 1
      If .all(i).tagName = "TABLE" Then
      MsgBox .all(i).innerText
          If .all(i).innerText Like "日期    數量    金額*" Then
以類似此法即可判斷出TABLE的位置
以上僅以個人對IE操作的心得提出
請熟悉語法的前輩不吝指正
作者: victorl    時間: 2010-6-27 00:30

個人比較習慣鎖定ID(getElementById)來取值[因為ID是唯一的,不會重複],當然ID不是必然的,如果設計者未加入時,只得使用Name or Tag來抓取資料了。
作者: sasho    時間: 2010-6-27 05:39

感謝兩位前輩的指點

小弟在這邊還有問題想請教各位前輩,還請各位前輩多幫忙,謝謝!

1. 雖然excel會自動出現可以輸入的屬性,但我還是不知道各屬性所代表的意思以及用法,所以不知道關於這些屬性
     的用法及意義該去哪邊查詢呢?若是去MSDN查又該用什麼key word呢?

2. 如同H大所說,可以針對變數的資料內容找到規則,所以我目前也是打算這麼作!
    但問題在於不知道資料內容到底是什麼 = ="
    比方說:針對某一網頁抓取其中的table,但網頁中找到的table可能不只一個,而且就算只找到一個,可能table
    編排的方式與我所看到的也不相同
     所以想說不知道有沒有辦法把我抓取到的資料顯示出來,如同msgbox的效果

謝謝大家!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)