2017-11-10 2 views
0

HKEX에서 배당 미래 가격을 긁고 싶습니다.클래스 이름 또는 ID가없는 VBA 웹 스크랩 내용

다음은이 사이트의 URL입니다 : http://www.hkex.com.hk/Market-Data/Futures-and-Options-Prices/Equity-Index/HSCEI-Dividend-Futures?sc_lang=en#&product=DHH

내가 VBA를 통해 "12 월 19 일 계약"의 Prev.Day 결제 가격을 긁어 싶었다. 그러나 클래스 이름이나 ID가 없으므로 정보에 액세스하는 방법을 모릅니다.

<tr> 
    <td>Dec-19</td> 
    <td>-</td> 
    <td>-</td> 
    <td>413.78</td> 
    <td> 
    - 
    <br> 
    - 
    </td> 
    <td>-</td> 
    <td> 
    - 
    <br> 
    - 
    </td> 
    <td>-<td> 
    <td>17,330</td> 
    </tr> 

어떻게 VBA를 통해 이것을 긁을 수 있습니까?

답변

0

눈에 띄는 깃발이없는 특정 항목을 찾는 것은 정말 자동화의 지옥입니다. 그러나 필자는 요소에 인덱스를 하드 코딩하지 않고이 스크립트를 작성했습니다. 이에게 기회를주고 원하는 값을 얻을 :

Sub Hkex_Data() 

    Dim IE As New InternetExplorer, html As HTMLDocument 
    Dim posts As Object 

    With IE 
     .Visible = False 
     .navigate "http://www.hkex.com.hk/Market-Data/Futures-and-Options-Prices/Equity-Index/HSCEI-Dividend-Futures?sc_lang=en#&product=DHH" 
     Do Until .readyState = READYSTATE_COMPLETE: Loop 
     Set html = .document 
    End With 
    Application.Wait (Now + TimeValue("0:00:05")) 

    For Each posts In html.getElementsByClassName("hsirowcon") 
     Row = Row + 1: Cells(Row, 1) = posts.NextSibling.NextSibling.FirstChild.innerText 
     Cells(Row, 2) = posts.NextSibling.NextSibling.LastChild.innerText 
    Next posts 

    IE.Quit 
End Sub 

결과 :

19-Dec 17,330 

참조 라이브러리에 추가 할 :

Microsoft internet controls 
Microsoft Html Object Library 
+0

내가 더 높은 클래스를 긁어와 그 안에있는 모든 항목을 찾을 수 . 하지만 코드가 훨씬 나아 보인다. 고마워. – Juuun

+0

도움이된다면, 내 답변 옆에있는 눈금을 눌러 대답으로 받아 들여야합니다. 감사. – SIM

0

getElementsByTagName을 사용하십시오. 당신을 확인한 다음 각 행과 각 행을 차례로 살펴보십시오. 그런 것.

Dim objTR As IHTMLElement 
Dim objTD As IHTMLElement 
Dim objTable As IHTMLElement 

For Each objTR In objTable.getElementsByTagName("tr") 
    For Each objTD In objTR 
     'do something with objtd.innerText 
    Next objTD 
Next objTR 

또는 지연 바인딩을 선호하는 경우 변수를 Object로 선언 할 수 있습니다.

관련 문제