Парсинг пунктов выдачи Wildberries

Рейтинг: 0Ответов: 1Опубликовано: 02.06.2023

Пытаюсь спарсить пвз, их рейтинг и адрес. Читал офф апи ВБ - нужных данных не нашел. Парсить со страницы https://www.wildberries.ru/services/besplatnaya-dostavka?desktop=1#terms-delivery не получается, т.к. рендеринг идет на стороне клиента. Подскажите, пожалуйста, как я могу получить нужную мне информацию? ЯП - не принципиально.

Ответы

▲ 1

Долго ковырялся в XHR запросах на https://www.wildberries.ru/services/besplatnaya-dostavka?desktop=1#terms-delivery Но так и не нашел как оттуда выцепить всю инфу по пунктам выдачи (был найден только post request с помошью которого по айди можно выдрать маршрут и рейтинг пункта, эти данные я использую ниже)

Нашел нужный url в Гугле - https://www.wildberries.ru/webapi/spa/modules/pickups

Плюс добавил к данным получаемым отсюда информацию из пост реквеста по url о котором писал выше.

Получилось такое:

def get_response(url):
    response = requests.get(url)
    while response.status_code != 200:
        print(response.status_code)
        time.sleep(1)
        response = requests.get(url)

    return response

# Название функции get_ звучит странно, учитывая что внутри post request, но ладно
def get_by_ids(url, json_data):
    response = requests.post(url, json=json_data)
    data = response.json()
    return data


if __name__ == '__main__':
    pickups_url = 'https://www.wildberries.ru/webapi/spa/modules/pickups'
    by_ids_url = 'https://www.wildberries.ru/webapi/poo/byids'

    data = get_response(pickups_url).json()
    pickups_info = {}

    for pickup in data['value']['pickups']:
        pickups_info[pickup['id']] = pickup

    json_data = list(pickups_info.keys())
    values = get_by_ids(by_ids_url, json_data)['value']

    for k, v in values.items():
        pickups_info[int(k)] = {**pickups_info[int(k)], **v}

    for key, value in pickups_info.items():
        print('Название: ', value.get('name', '-'))
        print('Адрес: ', value.get('address', '-'))
        print('Маршрут: ', value.get('wayInfo', '-'))
        print('Рейтинг: ', value.get('rate', '-'), '\n')

Консоль:

Название:  -
Адрес:  г. Ачинск (Красноярский край), 4-й мкр, д. 9
Маршрут:  До пункта самовывоза можно доехать автобусами № 7, 8,
          остановка Центральная районная больница. Сойдя на остановке
          необходимо перейти проспект Мира по направлению к Дому Быта.
          Дойдя до Дома Быта пройти 50 метров до жилого 5 этажного дома, 
          центральное крыльцо самовывоза.
Рейтинг:  4.96

...........

Название:  Московский постамат- для жителей подъезда №1
Адрес:  Россия, Москва, улица Маршала Ерёменко, дом: 5, корпус: 4, этаж: 1, подъезд: 1
Маршрут:  Постамат расположен в здании жилого дома, в подъезде №1.
          Войти в подъезд могут только жители и их гости. Постамат 
          расположен на 1 этаже около входа.
Рейтинг:  - 

Следующая интересная задачка - парсить только те пункты, что отображаются сейчас, исходя из масштаба на карте