Код Excel VBA для извлечения значения / кратного значения с веб-сайта

#vba #excel

#vba #excel

Вопрос:

Я пытаюсь извлечь данные из http://www.dsebd.org/displayCompany.php?name=LINDEBD с помощью кода VBA в excell.

пытаюсь получить следующие данные по этим ссылкам

Общее количество непогашенных ценных бумаг, название компании сектора

пытаюсь с,

     Sub GetData()
Set IE = CreateObject("InternetExplorer.Application")
my_url = "http://www.dsebd.org/displayCompany.php?name=LINDEBD"

With IE
    .Visible = True
    .navigate my_url
    .Top = 50
    .Left = 530
    .Height = 400
    .Width = 400

Do Until Not IE.Busy And IE.readyState = 4
    DoEvents
Loop

End With

Application.Wait (Now()   TimeValue("00:00:016")) ' For internal page refresh or loading

Set Results = IE.document.getElementsByTagName("table")
For Each itm In Results
    If itm.classname = "lgn" Then
        dd = itm.getAttribute("href")
        Exit For
    End If
    Next
' if you wnat to click the link
    itm.Click
' otherwise
    'Range("a1").Value = dd
    MsgBox dd
End Sub
  

Возможно ли собирать данные с этого сайта

Комментарии:

1. Что пошло не так с вашим кодом, который там есть?

2. ошибка времени выполнения 404, требуется obejct. Я думаю, что здесь что-то не так, если itm.classname = «lgn», то dd = itm.getAttribute(«href»)

3. Закомментирование itm.Click останавливает ошибку, но dd находится NULL в конце, поскольку код не может найти ни одного classname из lgn

Ответ №1:

Сначала вам нужно выполнить итерацию таблицы (table), затем вы выполняете итерацию строк (tr), затем внутри нее вы выполняете итерацию ячеек (td). Это не ссылки на этой странице.

Примечание: Следующее даст вам искомое значение, но этот код будет постоянно меняться при изменении веб-сайта.

 Sub GetData()
    Set IE = CreateObject("InternetExplorer.Application")
    my_url = "http://www.dsebd.org/displayCompany.php?name=LINDEBD"

    With IE
        .Visible = True
        .navigate my_url
        .Top = 50
        .Left = 530
        .Height = 400
        .Width = 400

    Do Until Not IE.Busy And IE.readyState = 4
        DoEvents
    Loop

    End With

    Application.Wait (Now()   TimeValue("00:00:016")) ' For internal page refresh or loading

    Set Results = IE.document.getElementsByTagName("table")
    For Each itm In Results
        Set rowAlt = IE.document.getElementsByClassName("alt")
        For Each itmTR In rowAlt
            Set tdValues = itmTR.getElementsByTagName("td")
            If tdValues.Item(0).innerText = "Total No. of Outstanding Securities" Then
                MsgBox tdValues.Item(1).innerText 'the value you seek
                Exit Sub 'don't continue this loop
            End If
        Next
    Next
End Sub