Как извлечь название акции в финансах Yahoo - PullRequest
0 голосов
/ 07 января 2019

Я нашел код, который извлекает все данные из таблиц на вкладке «финансы» в Yahoo Finance. Теперь я хочу иметь возможность извлечь также название акции, чтобы вставить ячейку A3 рядом с символом акции.

'this is the code to exctact the data
 Dim htm, Tr, Td, Tab1, Tab2, HTML_Content As Object
 Dim Web_URL As String
 Dim Column_Num_To_Start, iRow, iCol, eCol, iTable As Integer
 Dim Val, varVal1, varVal2, varVal3 As Variant
 Dim chtObj As ChartObject

 Column_Num_To_Start = 1
 iRow = 7
 iCol = Column_Num_To_Start
 iTable = 2

 Web_URL = "https://finance.yahoo.com/quote/" & Cells.Range("A2").Value & "/financials?p=" & Cells.Range("A2").Value

 Set HTML_Content = CreateObject("htmlfile")

 With CreateObject("msxml2.xmlhttp")
   .Open "GET", Web_URL, False
   .send
   HTML_Content.body.innerHTML = .responseText
 End With

 For Each Tab1 In HTML_Content.getElementsByTagName("table")
     With HTML_Content.getElementsByTagName("table")(iTable)
         For Each Tr In .Rows
             For Each Td In Tr.Cells
             ActiveSheet.Cells(iRow, iCol).Select
             ActiveSheet.Cells(iRow, iCol) = Td.innerText
             ActiveCell.WrapText = False
             iCol = iCol + 1
             Next Td
          eCol = iCol - 1
          iCol = Column_Num_To_Start
          iRow = iRow + 1
          Next Tr
        End With
    Exit For
Next Tab1

Ответы [ 2 ]

0 голосов
/ 07 января 2019

По акциям, которые я кратко рассмотрел, кажется, что это всегда первый h1, поэтому вы можете буквально использовать быстрый селектор css

HTML_Content.querySelector("h1").innerText

Вы также можете использовать атрибут = значение css селектор

HTML_Content.querySelector("[data-reactid='7']").innerText

В качестве примечания, представляющего интерес для некоторых: вы можете использовать сложный класс следующим образом:

HTML_Content.querySelector(".D\28 ib\29 > h1").innerText

Современные браузеры и многие библиотеки оптимизированы для CSS, поэтому, кроме старых версий IE, это быстрый метод выбора.

Я посмотрел на S & P 500 (^ GSPC), BP p.l.c. (BP.L), Banco Santander, S.A. (SAN), Apple Inc. (AAPL), Дженерал Электрик Компани (GE), Alcoa Corporation (AA), KOSPI Composite Index (^ KS11)

0 голосов
/ 07 января 2019

Сразу после выполнения вашего XMLHTTP-запроса страницы:

With CreateObject("msxml2.xmlhttp")
   .Open "GET", Web_URL, False
   .send
   HTML_Content.body.innerHTML = .responseText
End With

... название акции можно получить из заголовка h1:

stockName = HTML_Content.getElementById("quote-header-info").getElementsByTagName("h1")(0).innerText

... и затем вы можете поместить его в нужное место (например, Range("A3").Value = stockName).

Примечание. Я сделал свой тест на https://finance.yahoo.com/quote/SAN/financials?p=SAN, предположив, что именно так выглядел бы ваш URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...