@Pol1na

Парсинг динамического сайта на python?

Имеется сайт: https://www.ifema.es/en/fitur/exhibitors-catalogue
При скролле грида данные автоматически подгружаются. Их необходимо спарсить.
В F12 -> Network, отправляется POST запрос с https://api.swapcard.com/graphql
Как взаимодействовать с такой штукой и можно ли сформировать запрос на подгрузку всех данных в табличке?
выручайте :
  • Вопрос задан
  • 916 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Обычные graphql запросы. viewId всегда одинаковый судя по всему
endCursor возвращается при каждом запросе

import requests

data = [{"operationName":"EventExhibitorList","variables":{"viewId":"RXZlbnRWaWV3XzE1MjUyMA==","search":"","selectedFilters":[{"mustEventFiltersIn":[]}]},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"ee232939a5b943c0d87a4877655179bc2e5c73472ff99814119deddb34e0a3b6"}}}]

response = requests.post('https://api.swapcard.com/graphql', json=data).json()
# парсим нужные данные тут

end_cursor = response[0]['data']['view']['exhibitors']['pageInfo'].get('endCursor')

while end_cursor:
    data = [{"operationName":"EventExhibitorList","variables":{"viewId":"RXZlbnRWaWV3XzE1MjUyMA==","search":"","selectedFilters":[{"mustEventFiltersIn":[]}],"endCursor":end_cursor},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"ee232939a5b943c0d87a4877655179bc2e5c73472ff99814119deddb34e0a3b6"}}}]
    
    response = requests.post('https://api.swapcard.com/graphql', json=data).json()

    # тут парсим нужные данные

    end_cursor = response[0]['data']['view']['exhibitors']['pageInfo'].get('endCursor')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Посмотри там же конкретную структуру запроса (что за поля передаются, их значения). Потом сформируй такой же запрос, скажем через requests и отправляй. Также нужно будет понять, как парсить ответ - это json, или это кусок html, или ещё что?
Детали зависят от конкретного сайта, так что конкретный код - это уже фриланс.

Только имей ввиду, сайты могут не любить, когда их активно парсят. Варианты могут быть:
  • Проверка кук - просто загрузи сначала главную страницу в той же сессии requests, чтобы куки были.
  • Специальный сеансовый ключ для запросов - выясни, как он загружается, и сделай этот запрос перед началом работы.
  • Ограничение числа запросов с одного хоста - используй прокси, а лучше ограничь скорость работы скрипта.
  • Проверка клиента - поставь правильный User-Agent, можешь даже скопировать заголовки запроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы