Задать вопрос
@sunsexsurf
IT & creative

Как спарсить динамическую страницу?

Итак, имеем пациента:
сайт ВТБ
понимаем, что монетки генерятся автоматически, поэтому лезем в инструменты разработчика.
разбор network (xhr) привел нас к такой ссылке:
https://www.vtb.ru/api/sitecore/coinsapi/direct?co...
Изучаем далее и получаем:
https://www.vtb.ru/api/sitecore/coinsapi/filter
Смотрим headers этой ссылки:
- метод запроса - POST
- ответ - JSON
внутри JSON'а есть (url: искомый_урл)
понятно, что искомый_урл нужно подставить в https://www.vtb.ru/api/sitecore/coinsapi/direct?co...
и получим статическую страничку монеты.

проблема:
import requests as req
json_url = 'https://www.vtb.ru/api/sitecore/coinsapi/filter'
headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0'}
resp_json = req.get(json_url, headers = headers)
print(resp_json)

и ответ понятен: 404 (страница не существует)

вопрос: как правильно передать POST такому сайту?
  • Вопрос задан
  • 218 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Ну, для начала user-agent не обязателен, а Content-Type - обязателен, если планируете получить json. Также в post запросе в качестве параметра передаётся json, поэтому и нам его тоже нужно передать.
import requests

headers = {'Content-Type':'application/json;charset=utf-8'}
url = 'https://www.vtb.ru/api/sitecore/coinsapi/filter'
data = '{"query":"","newCollection":false,"Discounted":false,"GiftBox":false,"Order":"priceAsc","SearchGroups":false,"CoinList":"all","Favorites":[],"Groups":["8e67bb77202c40fa8ae0258d5bcb66f8","087e7eca08724e88aa1fbd0ebb0ebf70"],"Series":[],"Themes":[],"Metals":[],"PriceMin":"","PriceMax":"","Page":1,"ResultsOnPage":16}'

response = requests.post(url,data=data,headers=headers)

В json, который в data, можно менять различные параметры, такие как: номер страницы, количество монет на странице, минимальная и максимальная цена, и т.д.
После этих манипуляций получаем "200 OK" и json с монетками.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы