Макрос VBA, который очищает HTML, вытягивает некоторые неправильные элементы

0

У меня возникла проблема соскабливания некоторого HTML.

Вот URL, где мой macro ломается, а ниже - выдержка из кода:

Set els = IE.Document.getelementsbytagname("a")
    For Each el In els
        If Trim(el.innertext) = "Documents" Then
            colDocLinks.Add el.href
        End If
    Next el

Как вы можете видеть, открываете ли вы URL мы запускаем в результатах поиска; то макрос находит все links в таблице поиска и помещает их в Collection именем colDocLinks

Однако результаты поиска содержат на их 10-Q документы, которые я хочу включить, но у них также есть разные виды животных, которые я не хочу включать в себя как 10-Q/A документы...


Как я могу изменить цикл так, чтобы он явно добавлял только 10-Q, ничего не связанного с ними в коллекции, а не других, таких как 10-Q/A?

Теги:
excel-vba
excel
excel-2010

2 ответа

1
Лучший ответ
Public WithEvents objIE As InternetExplorer


Sub LaunchIE()
Set objIE = New InternetExplorer

objIE.Visible = True
objIE.Navigate "http://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=icld&type=10-Q%20&dateb=&owner=exclude&count=20"

End Sub

Private Sub objIE_DocumentComplete(ByVal pDisp As Object, URL As Variant)

Dim localIE As InternetExplorer
Set localIE = pDisp

Dim doc As MSHTML.IHTMLDocument3
Set doc = localIE.Document

Dim tdElements As MSHTML.IHTMLElementCollection
Dim td As MSHTML.IHTMLElement
Set tdElements = doc.getElementsByTagName("td")
For Each td In tdElements

    If td.innerText = "10-Q" Then

        Dim tr As MSHTML.IHTMLElement
        Set tr = td.parentElement

        Dim childrenElements As MSHTML.IHTMLElementCollection
        Dim child As MSHTML.IHTMLElement
        Set childrenElements = tr.Children
        For Each child In childrenElements
            If child.innerText = " Documents" Then
                'Handle found element
            End If
        Next

    End If

Next

End Sub
  • 0
    Спасибо вам всем за вашу вежливость, в данный момент работа забивает меня, но в следующее свободное время я проверю это и сообщу вам как можно скорее.
  • 1
    Приведенный выше код пропускает 7 из 12 требуемых элементов привязки. Если вы сделаете следующие изменения, все нужные элементы привязки будут найдены. Строка Dim tr As MSHTML.IHTMLElement должна измениться на Dim tr As MSHTML.IHTMLElement2 а строка Set childrenElements = tr.Children должна измениться на Set childrenElements = tr.getElementsByTagName("a")
0

Я бы использовал регулярное выражение для поиска и извлечения точных ссылок, которые я искал. Что-то вроде этого:

Dim RegEx As RegExp
Set RegEx = New RegExp
Dim match As match

With RegEx
    .IgnoreCase = True
    .Global = True
    .MultiLine = True
End With

RegEx.Pattern = "<td nowrap="nowrap">10-Q</td>.+?<a href=""(.+?)\.htm"">"

For Each match In RegEx.Execute(Selection)
    colDocLinks.Add match
Next

Я не тестировал регулярное выражение выше, поэтому может потребоваться некоторая корректировка. Для этого вам нужно будет включить ссылку на Microsoft VBScript Regular Expressions 5.5.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню