Страницы: 1
RSS
Power Query парсить информацию со всплывающей страницы сайта
 
Добрый день всем! Есть сайт фондовой биржи. На сайте в углу есть кнопка "ТОРГОВАЯ ИНФОРМАЦИЯ", при нажатии на которую вызывается страница с информацией по торгам на бирже. Как можно с помощью Power Query правильно спарсить данную страницу? Ссылка https://kase.kz/ru/#trade_info_period. У меня при обычном Get From Web по этой ссылке парситься только главная страница, а всплывающая нет. Как быть?
 
Видимо с таким никто не сталкивался...  
 
Всплывающее окно ссылается на адрес https://kase.kz/ru/trade_information/ajax/volume_date/ методом POST.
Но сформировать POST запрос у меня не получилось, выдает ошибку. Как я понял, там генерируется какой-то код или хэш, который передается в HTTP запросе, специально, чтобы нельзя было обратиться не из браузера. Может быть, можно как-то обойти это препятствие.
 
Цитата
написал:
Всплывающее окно ссылается на адрес  https://kase.kz/ru/trade_information/ajax/volume_date/  методом POST.
Но сформировать POST запрос у меня не получилось, выдает ошибку. Как я понял, там генерируется какой-то код или хэш, который передается в HTTP запросе, специально, чтобы нельзя было обратиться не из браузера. Может быть, можно как-то обойти это препятствие.
А можете подсказать, как можно сформировать POST запрос? Я с этим еще не сталкивался
 
allovar,

Код
let url =ваша ссылка,
headers=
[
тут указываем содержимое запроса и cookie
], 
response =Web.Contents(url, [Headers = headers]),

Далее, зависит от того, что вернет запрос.

Изменено: Neostt - 01.02.2023 12:31:20
 
Цитата
написал:
Web.Contents
POST запрос отличается от GET запроса тем, что в GET запросе значения переменных, передаваемых серверу, входят в сам URL и видны в адресной строке браузера.
Например, адрес этой страницы https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=154990&...
где переменные PAGE_NAME , FID и др.
В POST запросе этих переменных в адресной строке Вы не увидите, они находятся в полях формы внутри кода веб-страницы.
Но это все не так важно. По идее, зная нужные параметры, Вы вместо POST запроса можете использовать GET (хотя не всегда)
Главное, понять URL серверного скрипта, к которому надо обращаться, и передаваемые переменные и их значения (там кроме post или get могут быть куки и др, в том числе тот хэш-код, который призван не дать загрузить страницу иначе как из браузера ).
Если всплывающая страница подгружается по нажатию кнопки (видимо, с помощью javascript) без перезагрузки всей веб-страницы (эта технология, кстати - одна из основ Web2.0 :) ), то в адресной строке исходной страницы Вы нужный URL точно не увидите, все будет скрыто внутри браузера.
Для того, чтобы увидеть все запросы браузера к серверу и ответы, надо использовать специальные расширения для браузера. Например, HTTP Headers для Google Chrome.
С помощью этого расширения, видим, что при нажатии на кнопку "Торговая информация" происходят следующие запросы и ответы (их заголовки):

#REQUEST
Request ID: 3871
Type: xmlhttprequest
Time: Wed Feb 01 2023 19:35:53 GMT+0700 (GMT+07:00)
Method: POST https://kase.kz/ru/trade_information/

Accept: text/html, */*; q=0.01
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
X-CSRFTOKEN: fylkGdWKvPilZQvCJcdGThvMPOubzb7PL29WsWROavgjkLhiIZXT5VhAVhVF­nv3U
X-Requested-With: XMLHttpRequest
sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

#RESPONSE
Request ID: 3871
Type: xmlhttprequest
Time: Wed Feb 01 2023 19:36:47 GMT+0700 (GMT+07:00)
Method: POST https://kase.kz/ru/trade_information/
Status: 200 - OK

Cache-Control: no-cache must-revalidate proxy-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Language: ru
Content-Security-Policy: default-src 'self' http://www.google-analytics.com https://ssl.google-analytics.com https://www.google-analytics.com https://youtube.com https://www.youtube.com https://ad.kase.kz https://mc.yandex.ru https://irisapi.kase.kz https://youtu.be https://www.tradingview.com 'unsafe-inline' 'unsafe-eval'; img-src 'self' https://irisapi.kase.kz https://mc.yandex.ru https://ad.kase.kz https://www.google-analytics.com data:
Content-Type: text/html; charset=utf-8
Date: Wed, 01 Feb 2023 12:33:02 GMT
Expect-CT: enforce; max-age=3600
Pragma: no-cache
Server: kaseserver
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

#REQUEST
Request ID: 3873
Type: xmlhttprequest
Time: Wed Feb 01 2023 19:37:18 GMT+0700 (GMT+07:00)
Method: POST https://kase.kz/ru/trade_information/ajax/volume_date/

Accept: text/html, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36
X-CSRFTOKEN: fylkGdWKvPilZQvCJcdGThvMPOubzb7PL29WsWROavgjkLhiIZXT5VhAVhVF­nv3U
X-Requested-With: XMLHttpRequest
sec-ch-ua: "Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"

#RESPONSE
Request ID: 3873
Type: xmlhttprequest
Time: Wed Feb 01 2023 19:37:33 GMT+0700 (GMT+07:00)
Method: POST https://kase.kz/ru/trade_information/ajax/volume_date/
Status: 200 - OK

Cache-Control: no-cache must-revalidate proxy-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Language: ru
Content-Security-Policy: default-src 'self' http://www.google-analytics.com https://ssl.google-analytics.com https://www.google-analytics.com https://youtube.com https://www.youtube.com https://ad.kase.kz https://mc.yandex.ru https://irisapi.kase.kz https://youtu.be https://www.tradingview.com 'unsafe-inline' 'unsafe-eval'; img-src 'self' https://irisapi.kase.kz https://mc.yandex.ru https://ad.kase.kz https://www.google-analytics.com data:
Content-Type: text/html; charset=utf-8
Date: Wed, 01 Feb 2023 12:33:03 GMT
Expect-CT: enforce; max-age=3600
Pragma: no-cache
Server: kaseserver
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block


Если ввести в адресной строке браузера https://kase.kz/ru/trade_information/ или https://kase.kz/ru/trade_information/ , то выдает ошибку. Через vba и объект msxml2.xmlhttp тоже не получилось. Возможно, надо поиграться со всеми этими переменными, подставляя их в запрос.
Изменено: Алексей Ш - 01.02.2023 15:48:59
 
Content — указание этого значения изменяет веб-запрос с GET на POST, используя значение параметра в качестве содержимого POST.
Подробнее и с примерами здесь:
https://learn.microsoft.com/ru-ru/powerquery-m/web-contents
Страницы: 1
Наверх