2016-12-22 2 views
1

Я пытаюсь получить от даты до даты и год с даты возврата с сайта http://us.spindices.com/indices/equity/sp-oil-gas-exploration-production-select-industry-index в таблицу Excel с помощью VBA. Проблема в том, что в коде страницы нет «id =», что, я понимаю, сделает этот процесс намного проще. Существует также вопрос о том, какой период времени (от года к дате или месяца до даты) виден, но я был бы доволен соскабливанием только значений MTD на данный момент.scrape html без id в vba

Вот мой код:

Sub Get_Change() 

'attempting to scrape Barclay's website 

Dim appIE As Object 
Dim MyVar As String 


Set appIE = CreateObject("internetexplorer.application") 

With appIE 
    .Navigate "http://us.spindices.com/indices/equity/sp-oil-gas-exploration-production-select-industry-index" 
    .Visible = True 
End With 

Do While appIE.Busy 
    DoEvents 
    Range("A1").Value = "Working..." 
Loop 
Set TDelements = appIE.document.getElementsbyClassName("performance-chart-table") 

For Each TDelement In TDelements 
    If TDelement.class = "change" Then 
     MyVar = TDelement.class.innerText("Value") 

    End If 
Next 
Range("A1").Value = MyVar 
appIE.Quit 
Set appIE = Nothing 


End Sub 

Если я могу получить путь, чтобы установить переменную «» MYVAR к текущему МПД или значения с начала года, я буду делать, но я с трудом потому что для любого из этих значений нет уникального идентификатора. Есть идеи?

ответ

0

Недавно я просмотрел несколько обучающих видеороликов, и я могу сказать, что синтаксис CSS-селектора является мощным, и я бы рекомендовал его. Это тот же синтаксис, который используют javascript/web-разработчики для выбора элементов при использовании JQuery.

Я думаю, вы должны попробовать использовать

document.queryselectorall

или в вашем случае, потому что вы пробурены к документу, чтобы получить «производительность-диаграммы стол» вызов queryselectorall от этой переменной, TDelements.

Документация на http://www.w3schools.com/jsref/met_document_queryselectorall.asp

и вы поставляете в качестве параметра строку селектора CSS синтаксис, который можно найти на http://www.w3schools.com/cssref/css_selectors.asp

И я пошел и сделал это для вас ....

Sub Get_Change() 
    '* Tools-References Microsoft HTML Object Library 

    'attempting to scrape Barclay's website 

    Dim appIE As Object 
    Dim MyVar As String 


    Set appIE = CreateObject("internetexplorer.application") 

    With appIE 
     .Navigate "http://us.spindices.com/indices/equity/sp-oil-gas-exploration-production-select-industry-index" 
     .Visible = True 
    End With 

    Do While appIE.Busy 
     DoEvents 
     Range("A1").Value = "Working..." 
    Loop 
    Dim htmlDoc As MSHTML.HTMLDocument 
    Set htmlDoc = appIE.document 

    Dim TDelements2 As MSHTML.IHTMLElementCollection 
    Set TDelements2 = htmlDoc.getElementsByClassName("performance-chart-table") 
    While TDelements2.Length < 1 

     DoEvents 
     Application.Wait (Now() + TimeSerial(0, 0, 3)) 
     Set TDelements2 = htmlDoc.getElementsByClassName("performance-chart-table") 

    Wend   

    Dim oHTMLTablePerformanceChartTable As MSHTML.HTMLTable 
    Set oHTMLTablePerformanceChartTable = TDelements2.Item(0) 


    Dim objChangeCollection As MSHTML.IHTMLDOMChildrenCollection 
    Set objChangeCollection = oHTMLTablePerformanceChartTable.querySelectorAll(".change") 

    'Debug.Assert objChangeCollection.Length = 2 

    Dim objChange2 As Object 
    Set objChange2 = objChangeCollection.Item(1) 


    MyVar = objChange2.innerText 




    'Set TDelements = appIE.document.getElementsByClassName("performance-chart-table") 
    ' 
    'For Each TDelement In TDelements 
    ' TDelements.querySelectorAll (".change") 
    ' If TDelement.class = "change" Then 
    '  MyVar = TDelement.class.innerText("Value") 
    ' 
    ' End If 
    'Next 
    Range("A1").Value = MyVar 
    appIE.Quit 
    Set appIE = Nothing 


End Sub 
+0

Ничего себе это здорово, спасибо! Когда я запускаю код, я получаю ошибку во время выполнения 91; есть ли объект, который мне нужно выбрать в библиотеке ссылок, чтобы он выполнялся правильно? – DangeRuss

+0

Строка 34 - та, которая заканчивается .querySelectorAll (". Change"). Я googled, и я не знаю точно, как это исправить ... – DangeRuss

+0

IE11 Ошибка 91 - это «объектная переменная или с переменной блока, которая не установлена», кстати – DangeRuss

Смежные вопросы