Kак получить параметр qrator_jsid и cookes сайт www.auchan.ru?

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

Парсер написан на Scrapy. Сайт www.auchan.ru. Не могу понять, как получить свежий параметр qrator_jsid или свежие cookies сразу при запуске.

Со старта куки я беру с сайта сам, ложу их в модуль и парсер старует, но после 50-60 карточек товаров на сайте куки меняются, а точнее один параметр qrator_jsid и дальше работа парсера упирается в 401 ошибку.

Уважаемые коллеги, есть мысли по этому вопросу или кто-то сталкивался, может? Помогите пожалуйтся.

Есть мысль сперва селениумом брать куки с сайта, а уже потом запускать парсер. Все POST и GET запросы не дают результата, потому что палится Scrapy, а не браузер.

Прошу помощи!;-)

Ответы

▲ 0

Нашел вроде решение. Алгоритм следующий.

  1. Запускаешь селениум драйвер и делаешь sleep например на 20 сек,
  2. Открылся браузер и пока работает sleep, в новой вкладке в нем, открываешь сайт . (Он прогрузит нужные куки без этого 403 получишь)
  3. Sleep как раз подойдет к концу, и делаешь driver.get(сайт) и забираешь кукисы оттуда
    if not COOKIE_VALID or COOKIE_VALID_UNTIL < datetime.now():
        driver.driver.get(BASE_URL)
        sleep(5)
        COOKIE = {
           s["name"]: s["value"]
           for s in driver.get_cookies()
           if s["name"].startswith("qrator")
        }
        COOKIE_VALID = True
        COOKIE_VALID_UNTIL = datetime.now() + timedelta(minutes=5)    
  1. Парсишь обычным bs4, забирая через requests.Session() session.get(url, cookies=COOKIE)

И все по красоте. Единственное почему надо такие махинации, (можно просто с headers скопировать и вручную вставить без селениума), но используя такой подход можно потом эти куки например раз в 5 минут переобновлять, они довольно быстро expired становятся, а так можно просто драйвером страницу обновить и новые куки забрать. Все впринципе автоматизировано, кроме старта самого скрипта) Единственное чтобы драйвер работал на протяжении всего скрипта, чтоб не закрывать его. Ну и headers указывай соответственно:

HEADERS = {
   "Cache-Control": "max-age=3600",
   "User-Agent": fake_useragent.UserAgent().chrome,
   "Upgrade-Insecure-Requests": "1",
}