Kак получить параметр qrator_jsid и cookes сайт www.auchan.ru?
Парсер написан на Scrapy. Сайт www.auchan.ru. Не могу понять, как получить свежий параметр qrator_jsid или свежие cookies сразу при запуске.
Со старта куки я беру с сайта сам, ложу их в модуль и парсер старует, но после 50-60 карточек товаров на сайте куки меняются, а точнее один параметр qrator_jsid и дальше работа парсера упирается в 401 ошибку.
Уважаемые коллеги, есть мысли по этому вопросу или кто-то сталкивался, может? Помогите пожалуйтся.
Есть мысль сперва селениумом брать куки с сайта, а уже потом запускать парсер. Все POST и GET запросы не дают результата, потому что палится Scrapy, а не браузер.
Прошу помощи!;-)
Ответы (1 шт):
Нашел вроде решение. Алгоритм следующий.
- Запускаешь селениум драйвер и делаешь sleep например на 20 сек,
- Открылся браузер и пока работает sleep, в новой вкладке в нем, открываешь сайт . (Он прогрузит нужные куки без этого 403 получишь)
- 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)
- Парсишь обычным 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",
}