Вы, похоже, ничего не предпринимали.
Я только публикую этот учебный пост, надеясь, что это может вдохновить вас на написание собственного кода в будущем.
Как я уже говорил в комментариях, веб-сайт, который вы пытаетесь очистить, предлагает очень удобный способ загрузки нужных данных через HTTP-запрос.
HTTP-запрос является структурированным способ запросить что-то с сервера. В этом случае мы хотим отправить две даты на сервер и получить соответствующие результаты поиска.
Чтобы узнать, как должен выглядеть этот запрос, вы должны проверить сетевой трафик c, когда кнопка отправки щелкнул. Вы можете сделать это через инструменты разработчика вашего браузера ( F12 ):
Если вы go через Заголовки и По параметрам запроса вы увидите, как должны выглядеть URL, тело и заголовки. В этом конкретном случае все параметры отправляются в теле запроса в формате JSON, и большинство заголовков не являются необходимыми для успеха запроса.
Тело запроса выглядит так:
{'name':'NIFTY 50','startDate':'01-Feb-2020','endDate':'29-Feb-2020'}
В этом конкретном случае полезной нагрузкой ответа является строка json внутри другой строки json. Вы можете проверить его структуру с помощью инструмента, подобного this . Вот как выглядит второй json:
В основном он состоит из одного элемента на запрошенную дату, и каждый элемент состоит из 7 параметров и соответствующих им значения.
CODE
Option Explicit
Sub nse()
Dim req As New MSXML2.XMLHTTP60
Dim url As String, defaultPayload As String, requestPayload As String, results() As String
Dim payloadJSON As Object, responseJSON As Object, item As Object
Dim startD As Date, endD As Date
Dim key As Variant
Dim i As Long, j As Long
Dim rng As Range
startD = "01/02/2020" 'change the date to whichever you want
endD = "29/02/2020" 'change the date to whichever you want
url = "https://www.niftyindices.com/Backpage.aspx/getHistoricaldatatabletoString"
defaultPayload = "{'name':'NIFTY 50','startDate':'','endDate':''}"
Set rng = ThisWorkbook.Worksheets("Name of your Worksheet").Range("A2") 'use the name of the worksheet in which you want the results to be printed.
Set payloadJSON = JsonConverter.ParseJson(defaultPayload)
payloadJSON("startDate") = Day(startD) & "-" & MonthName(Month(startD), True) & "-" & Year(startD) '01-Feb-2020
payloadJSON("endDate") = Day(endD) & "-" & MonthName(Month(endD), True) & "-" & Year(endD) '29-Feb-2020
requestPayload = JsonConverter.ConvertToJson(payloadJSON)
With req
.Open "POST", url, False
.setRequestHeader "Content-Type", "application/json; charset=UTF-8"
.setRequestHeader "X-Requested-With", "XMLHttpRequest"
.send requestPayload
Set responseJSON = JsonConverter.ParseJson(.responseText)
End With
Debug.Print responseJSON("d")
Set responseJSON = JsonConverter.ParseJson(responseJSON("d"))
ReDim results(1 To responseJSON.Count, 1 To 7)
i = 0
For Each item In responseJSON
i = i + 1
j = 0
For Each key In item
j = j + 1
results(i, j) = item(key)
Next key
Next item
rng.Resize(UBound(results, 1), UBound(results, 2)) = results
End Sub
Приведенный выше код в демонстрационных целях выводит результаты, начиная с ячейки A2 пустой рабочей таблицы Excel. Вы можете изменить код так, чтобы он наилучшим образом соответствовал вашим потребностям.
Вам потребуется добавить следующие ссылки на ваш проект (VBE> Инструменты> Ссылки):
Microsoft XML version 6.0
Microsoft Scripting Runtime
Вам также потребуется Добавьте этот JSON парсер в ваш проект. Следуйте инструкциям по установке, приведенным в ссылке, и вы должны установить go.
РЕЗУЛЬТАТЫ
Вот пример результатов за период 1/2/2020 до 29/2/2020