Ладно, не знаю точно, что вам нужно, но сайт, который вы просматриваете, предлагает API, который, на мой взгляд, может значительно облегчить вашу жизнь. Проще говоря, это означает, что он обеспечивает простой способ запроса данных с использованием некоторых параметров, встроенных в URL. Возвращает запрошенные данные в формате JSON.
В следующем коде я буду использовать метод запроса XMLHTTP и анализатор JSON. Для этого вам понадобится следующее:
- Анализатор JSON , он помогает вам анализировать загруженные данные. Следуйте инструкциям по установке, чтобы импортировать его в ваш проект
- Ссылка на библиотеку
Microsoft Scripting Runtime
. Это нужно парсеру JSON.
- Ссылка на библиотеку
Microsoft WinHTTP Services, Version 5.1
. Позволяет использовать объект HTTP-запроса.
В демонстрационных целях следующий код будет печатать только в ближайшем окне имя и позицию первой записи. Вы можете изменить код в соответствии со своими потребностями.
Sub test()
Dim req As New WinHttpRequest
Dim jsonResponse As String
Dim jsonParsed As Object
Dim url As String
Dim pageNum As Integer
Dim numPerPage As Integer
pageNum = 1 'You can change this parameter to navigate in different pages
numPerPage = 100 'You can change this parameter to control the number of entries
url = "https://www.gurufocus.com/reader/_api/stocks/OTCPK:CFWFF/insider?page=" & pageNum & "&per_page=" & numPerPage & "&sort=date%7Cdesc"
With req
.Open "GET", url, False
.setRequestHeader "Accept", "application/json, text/plain, */*"
.setRequestHeader "Authorization", ThisWorkbook.Worksheets("The name of your Worksheet").Range("A1").Value 'I have stored a string that is essential to the request in cell A1
.send
jsonResponse = .responseText
End With
Set jsonParsed = JsonConverter.ParseJson(jsonResponse)
Debug.Print jsonParsed("data")(1)("name") 'get the name parameter of the first entry
Debug.Print jsonParsed("data")(1)("position") 'get the position parameter of the first entry
End Sub
Обратите внимание, что есть очень длинная строка, которая необходима для запроса, который я сохранил в ячейке A1. Эта строка выглядит так:
Знаменосец
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImUxYjAwMmYxMjczMGRiMTBmMmZkYjJkNDk0YTU4NjRmZDZjOWY3ZGI4ZmI1NDY1NTQ2MzZlMGJhNzkxODUxNmY4NTM2ZWIzZDNhODhmN2VmIn0.eyJhdWQiOiIyIiwianRpIjoiZTFiMDAyZjEyNzMwZGIxMGYyZmRiMmQ0OTRhNTg2NGZkNmM5ZjdkYjhmYjU0NjU1NDYzNmUwYmE3OTE4NTE2Zjg1MzZlYjNkM2E4OGY3ZWYiLCJpYXQiOjE1NTkwNzA3OTcsIm5iZiI6MTU1OTA3MDc5NywiZXhwIjoxNTY5NDM4NzkzLCJzdWIiOiIiLCJzY29wZXMiOltdfQ.mZ4DqhUk9YAU6JYDBScF8MJ_zHPyL94bAec7LxZTaWipcWf9uesdGDMDC9v_7W-6zrtXAUWhk4YAL70E5rpPjM7gusYH0RfO48O2PnaV8gsqXoNCFwFBOHuxh109q7X0YsNkfX2wX8m3XigtK9A_YAGID7wxgX96lwzBevsDJ3borHMcJlQtxidF_Bq2D5WPASsuy3jdY80HkOCR1y4eaSIswBEtK5rPj_xy7VXRbYGhLklqw4wgHgq4blfaHnVVmPXf6k8mx45ye8vPecS-w9kjuDOHVn2mvU6mpBzqEpbH4lqpiqmYG7M-CvB1joEAcMQtcilCvsdfKOusoC2MU4_vPtF3Q4ZFVaEcXIQgomdKtFa_XGpCudit45b2rEFacKMUENqLj_sPwYkgM1IPl1lQfR-VpigqnCHPAxVQAPzqwJvS6CxuYOPmvnrx23fBAillP7LtDHwHtlMpgZUjdB5y6IWsia76crM4kbkrKn3zc8xoAGb1fIrgJlY-9hOzrwsmrchantEdYOFZjcMJvhCnlfvnEm6kT2Sdcu4o6TndTZJjrVmD4mb-jNGy4kw_mAx1DfyqR7GLtCVSzcSLKgrrwCJEL22K2bfXH 2HExXvgLFbPXivVZJc70TnF9lJmx_dx79cxAm7szFGIdrs56bAC4mdKpvKL3BNmVY-J-G0 * * тысяча двадцать-три
Эта же строка должна работать и для вас.
Результат выглядит так:
Brown, James Michael
Senior Officer
Каждая из 100 записей данных имеет следующую структуру:

Довольно легко просмотреть все записи. Например, чтобы напечатать имя всех записей, вы должны сделать это:
Dim item As Object
For Each item In jsonParsed("data")
Debug.Print item("name")
Next item
Наконец, вы также можете просмотреть все параметры каждой записи. Например, следующий код печатает все параметры и их соответствующие значения для первой записи:
Dim key As Variant
For Each key In jsonParsed("data")(1).Keys
Debug.Print key & ": " & jsonParsed("data")(1)(key)
Next key
Таким образом, вы можете получить доступ к любому параметру для каждой записи.