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

    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 комментарий
  • Парсинг динамического сайта на python?

    Vindicar
    @Vindicar
    RTFM!
    Посмотри там же конкретную структуру запроса (что за поля передаются, их значения). Потом сформируй такой же запрос, скажем через requests и отправляй. Также нужно будет понять, как парсить ответ - это json, или это кусок html, или ещё что?
    Детали зависят от конкретного сайта, так что конкретный код - это уже фриланс.

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

    SoreMix
    @SoreMix
    yellow
    Либо selenium, либо точно так же как и в обычном парсинге, ничем это не отличается. Так же открываем код страницы и ищем нужные данные.

    import requests
    import json
    import re
    
    r = requests.get('https://aliexpress.ru/item/4000985692469.html')
    
    script = json.loads(re.search(r'{"actionModule.+}}', r.text).group())
    goods = script['skuModule']['skuPriceList']
    
    for good in goods:
    
        name = good['skuAttr'].split('#')[-1]
        price = good['skuVal']['skuActivityAmount']['formatedAmount']
    
        print(name, price)
    Ответ написан
    Комментировать