Извлечь гиперссылку с веб-сайта, используя ошибку VBA - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь извлечь все гиперссылки, содержащие "http://www.bursamalaysia.com/market/listed-companies/company-announcements/", из веб-страниц, которые я ввожу.

Сначала код работал хорошо, но после этого я столкнулся с проблемами, которые я не могИзвлеките URL-ссылку, которая мне нужна. Она просто пропадает каждый раз, когда я запускаю саб. enter image description here

Ссылка: http://www.bursamalaysia.com/market/listed-companies/company-announcements/#/?category=SH&sub_category=all&alphabetical=All

Sub scrapeHyperlinks()

    Dim IE As InternetExplorer
    Dim html As HTMLDocument
    Dim ElementCol As Object
    Dim Link As Object
    Dim erow As Long
    Application.ScreenUpdating = False
    Set IE = New InternetExplorer


    For u = 1 To 50
    IE.Visible = False
    IE.navigate Cells(u, 2).Value
    Do While IE.readyState <> READYSTATE_COMPLETE
    Application.StatusBar = "Trying to go to websitehahaha"
    DoEvents

    Loop
    Set html = IE.document
    Set ElementCol = html.getElementsByTagName("a")
    For Each Link In ElementCol
    erow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    Cells(erow, 1).Value = Link
    Cells(erow, 1).Columns.AutoFit
    Next
    Next u

    ActiveSheet.Range("$A$1:$A$152184").AutoFilter Field:=1, Criteria1:="http://www.bursamalaysia.com/market/listed-companies/company-announcements/???????", Operator:=xlAnd

    For k = 1 To [A65536].End(xlUp).Row
    If Rows(k).Hidden = True Then
    Rows(k).EntireRow.Delete
    k = k - 1
    End If
    Next k


    Set IE = Nothing
    Application.StatusBar = ""
    Application.ScreenUpdating = True
End Sub

1 Ответ

0 голосов
/ 29 сентября 2018

Просто чтобы получить квалификацию hrefs, которую вы упомянули по указанному URL, я бы использовал следующее.Он использует комбинацию селекторов CSS для нацеливания на URL-адреса, представляющие интерес с указанной страницы.

Комбинация селекторов CSS:

#bm_ajax_container [href^='/market/listed-companies/company-announcements/']

Это селектор потомков , ищущийэлементы с атрибутом href, значение которых начинается с /market/listed-companies/company-announcements/, и имеющие родительский элемент с идентификатором bm_ajax_container.Этот родительский элемент является контейнером ajax."#" является селектором идентификатора, а « [] » обозначает селектор атрибута."^" означает, что начинается с.

Пример контейнера div и первого соответствующего href:

image

Поскольку более одного элементадля сопоставления комбинация селекторов CSS применяется с помощью метода querySelectorAll.Это возвращает nodeList, чей .Length может быть пройден для доступа к отдельным элементам по индексу.

Полный набор соответствующих ссылок записан на листе.


Пример результатов CSS-запроса со страницы с использованием селектора (образец):

enter image description here


VBA:

Option Explicit
Public Sub GetInfo()
    Dim IE As New InternetExplorer
    Application.ScreenUpdating = False
    With IE
        .Visible = True
        .navigate "http://www.bursamalaysia.com/market/listed-companies/company-announcements/#/?category=SH&sub_category=all&alphabetical=All"

        While .Busy Or .readyState < 4: DoEvents: Wend

        Dim links As Object, i As Long
        Set links = .document.querySelectorAll("#bm_ajax_container [href^='/market/listed-companies/company-announcements/']")
        For i = 0 To links.Length - 1
            With ThisWorkbook.Worksheets("Sheet1")
                .Cells(i + 1, 1) = links.item(i)
            End With
        Next i
        .Quit
    End With
    Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...