@b_a_y
Python, Selenium

Как парсить динамические сайты типа dns-shop?

Решил спарсить сайт ДНС, но возникла трудность. Страница с содержимым обновляется динамически. А именно, если мы перейдем по ссылке Смартфоны ДНС, то увидим полный список смартов, а если попытаемся выполнить
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = requests.get("https://www.dns-shop.ru/catalog/17a8a01d16404e77/smartfony/", headers = headers)
, то вернутся только скрипты JS.
Опытным путем был выявлен запрос AJAX, на который рендарится страница с нормальным списком смартвфонов -
url = 'https://www.dns-shop.ru/ajax-state/product-buy/?cityId=15&langId=ru&v=2'
, но, проблема в том, что нужно сделать POST запрос, но при попытке его сделать, я всегда получаю ошибку 400, 403. Знаю, что ошибка состоит в не распознанности запроса и подобном. Но я не знаю, как передать нормальный csrf токен. Вероятно в нем дело. Прошу помощи.
  • Вопрос задан
  • 4640 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ichi
@Ichi
Увлекаюсь программированием
У ДНС хорошая защита от парсинга. При чем некоторые json ответы на запросы можно получить только через браузер.

Для начала можно составить список всех товаров. Ссылки на товары можно взять из карты сайта https://www.dns-shop.ru/sitemap.xml

Там вроде получается около 600к ссылок. Смартфоны потом ищутся банально по слову smartphone в ссылке

Далее через селениум парсятся сами страницы.

По идее можно парсить только данные от микроразметки, например,
https://www.dns-shop.ru/product/microdata/d5635852...
Тут есть данные бренда, названия, цены, рейтинга. Проблема только получения этих uuid товаров

И да, сразу предупреждаю, скрипты ДНС отслеживают роботов. И если что, сразу банят ip адреса (возможно даже подсеть). Так что много запросов с одного ip делать нельзя.
Ответ написан
Ваш ответ на вопрос

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

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