Web Scraping с VBA - почти там - PullRequest
       1

Web Scraping с VBA - почти там

0 голосов
/ 21 сентября 2019

Изучив много постов здесь, я наконец-то исправил код, который работал (ниже)!Он извлекает значение индекса из yahoo finance, когда индекс является единственной точкой данных на странице (https://finance.yahoo.com/quote/%5EHSI?p=%5EHSI&.tsrc=fin-srch).

Однако, когда я хочу такой же индекс с веб-сайта, содержащего несколько значений индекса (https://www.hkex.com.hk/?sc_lang=en), веб-код выглядит для меня подавляющим, чтобы правильно сослаться на элемент и включить его в мой код. Кто-нибудь может помочь с этим последним препятствием? Спасибо. enter image description here

Sub HSI_Scrape()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False

IE.Navigate "https://finance.yahoo.com/quote/%5EHSI?p=%5EHSI&.tsrc=fin-srch"

Do While IE.Busy
    Application.Wait DateAdd("s", 1, Now)
Loop

Dim hsi As String
hsi = IE.Document.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)")(0).innerText

Worksheets("Tickers").Select
Range("z11").value = hsi

End Sub

1 Ответ

1 голос
/ 21 сентября 2019

Каждый из тикеров на HKEX имеет класс "listitem".Таким образом, чтобы получить каждый тикер, ищите этот класс, используя getElementsByClassName ("listitem").Проходите по каждому элементу, и первый дочерний элемент (class = "col_name") элемента будет именем тикера, а второй дочерний элемент (class = "col_last") будет ценой.

Sub HSI_Scrape()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = False

    IE.Navigate "https://www.hkex.com.hk/?sc_lang=en"

    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

    Dim listitems As Object 'list of tickers
    Dim listitem As Object  'each ticker
    Set listitems = IE.document.getElementsByClassName("listitem")
    Dim row As Integer
    row = 1
    For Each listitem In listitems
        Worksheets("Tickers").Range("A" & row) = listitem.Children(0).innerText 'Ticker Name
        Worksheets("Tickers").Range("B" & row) = listitem.Children(1).innerText 'Ticker Price
        row = row + 1
    Next listitem
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...