Получение данных (Балансы, а не запасы) из финансов Yahoo с VBA - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь в течение нескольких дней получить данные бухгалтерского баланса из финансов Yahoo с помощью инструкции VBA, такой как ".getElementsByTagName" для компаний, но она не работает ... ничего не происходит, я застрял ...

Любые идеи? см. код ниже:

Sub Get_Data()
Dim url As String
Dim http As Object
Dim TR_col As Object, Tr As Object
Dim TD_col As Object, Td As Object
Dim row As Long, col As Long
Dim html As Object
Dim tbl As Object
'

On Error Resume Next

Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0") 'CreateObject("MSXML2.ServerXMLHTTP.6.0")
    url = "https//finance.yahoo.com/quote/AAPL/balance-sheet?p=AAPL"
    http.Open "POST", url, False
    http.setRequestHeader "Content-Type", "text/xml"
    http.Send
    MsgBox http.responseText

Set html = CreateObject("htmlfile")
html.body.innerHTML = http.responseText
Set tbl = html.getElementById("Pos(r)")

    row = 1
    col = 1
    Set TR_col = html.getElementsByTagName("TR")
    For Each Tr In TR_col
        Set TD_col = Tr.getElementsByTagName("TD")
        For Each Td In TD_col
            Cells(row, col) = Td.innerText
            col = col + 1
        Next
        col = 1
        row = row + 1
    Next

End Sub 

1 Ответ

0 голосов
/ 10 ноября 2019

Я думаю, это поможет. Мне пришлось добавить «:» к URL-адресу, изменить «POST» на «GET» и установить 2 заголовка запроса, первый - cookie, который, я думаю, истекает через год, это было выяснено, выполнив следующее:

Cells(1, 1) = http.responseText
Dim responseHeader As String
responseHeader = http.getAllResponseHeaders
Cells(2, 1) = responseHeader

и чтение строки setcookie. Затем я просто прописал это в заголовке запроса. Рабочий код выглядит следующим образом:

Sub Get_Data()
Dim url As String
Dim http As Object
Dim TR_col As Object, Tr As Object
Dim TD_col As Object, Td As Object
Dim row As Long, col As Long
Dim html As Object
Dim tbl As Object

'On Error Resume Next

Set http = CreateObject("MSXML2.ServerXMLHTTP.6.0") 
'CreateObject("MSXML2.ServerXMLHTTP.6.0")
url = "https://uk.finance.yahoo.com/quote/AAPL/balance-sheet?p=aapl"
http.Open "GET", url, False
http.setRequestHeader "Cookie", "B=22guonpesgnqg&b=3&s=5p"
http.setRequestHeader "Content-Type", "text/xml"
http.Send
Cells(1, 1) = http.responseText
'Dim responseHeader As String
'responseHeader = http.getAllResponseHeaders
'Cells(2, 1) = responseHeader

Set html = CreateObject("htmlfile")
html.body.innerHTML = http.responseText
Set tbl = html.getElementById("Pos(r)")
row = 1
col = 1
Set TR_col = html.getElementsByTagName("TR")
For Each Tr In TR_col
    Set TD_col = Tr.getElementsByTagName("TD")
    For Each Td In TD_col
        Cells(row, col) = Td.innerText
        col = col + 1
    Next
    col = 1
    row = row + 1
Next

End Sub

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

...