Парсинг Амазона на easy без мам, пап и ипотек
Попался мне на глаза на просторах интернета скрипт, который позволяет парсить карточки товаров с Амазона. А мне как раз было необходимо решение подобной задачи.
Я сломал себе голову в поисках того, как спарсить карточки товаров в Амазоне. Проблема в том, что у Амазона используется разные варианты дизайна под различную выдачу, в частности – если необходимо спарсить карточки по поисковому запросу «bags» - карточки будут расположены вертикально, как мне и нужно, а вот если взять, к примеру «t-shirts» - тут уже карточки расположены горизонтально, и с таким расположение скрипт выпадает в ошибку, он отрабатывает открытие страницы, но не хочет скроллить.
Более, того, начитавшись различных статей, где юзеры ломают голову, как обойти капчу на Амазон, я апгрейдил скрипт и теперь он может обойти капчу, если она встретится (работает при помощи 2капча), скрипт проверяет наличие капчи на странице, после каждой загрузки новой страницы и если капча встречается – отправляет запрос на сервер 2капча, а после получения решения, подставляет его и продолжает работу.
Однако, как обойти капчу не самый сложный вопрос, так как это нетривиальная задача в наше время, более насущный вопрос – как сделать так, чтобы скрипт отрабатывал не только с вертикальным расположением карточек товаров, но и с горизонтальным.
Ниже я подробно распишу что в себя включает скрипт, продемонстрирую его работу, а если вы сможете помочь в решении задачи, что добавить (поменять) в скрипте, чтобы он срабатывал на горизонтальные карточки – буду благодарен.
Ну, а кому-то скрипт поможет хотя бы в своем ограниченном функционале.
Итак, давайте разберем скрипт по кусочкам!
Подготовка
Сперва скрипт импортирует необходимые для выполнения задачи модули
Разберем по частям:
Импортирует класс webdriver, который позволяет управлять браузером (в моем случае Firefox) через скрипт
Импортирует класс By, с помощью которого скрипт будет искать элементы для парсинга по XPath (он может искать и другие атрибуты, но в данном случае будет использоваться XPath)
Импортирует класс Keys, который будет использоваться для симуляции нажатия на клавишы, в случае с этим скриптом, это будет прокрутка страницы вниз Keys.PAGE_DOWN
Импортирует класс ActionChains, для создания сложных последовательных действий, в нашем случае – нажатие на кнопку PAGE_DOWN и ожидание загрузки всех элементов на странице (так как в Амазоне карточки загружаются по мере скролла)
Импортирует класс WebDriverWait который ждет, пока искомая нам информация прогрузилась, например описание товара, которое мы будем выискивать по XPath
Импортирует класс expected_conditions (сокращенно EC) который работает в связке с предыдущим классом и указывает WebDriverWait, какое конкретное условие ему необходимо ждать. Повышает надежность работы скрипта, чтобы он не начал взаимодействовать с еще незагруженным содержимым.
Импортирует модуль csv, для работы с csv файлами.
Импортирует модуль os, для работы с операционной системой (создание директорий, проверка наличие файлов и т.п.).
Импортируем функцию sleep – эта та самая функция, которая будет приостанавливать скрипт на конкретное время (в моем случае 2 сек, но можно поставить и больше) чтобы элементы при скролле прогрузились.
Импортирует библиотеку requests, для отправки HTTP-запросов, для взаимодействия с сервисом распознавания капчи 2капча.
Настройка
После того, как все импортировано, скрипт приступает к настройке браузера для работы, в частности:
Установка ключа АПИ для обращения к сервису 2капча
В скрипте прописан user-agent (его естественно, можно менять), который устанавливается для браузера. После этого происходит запуск браузера с указанными настройками.
Далее идет модуль для решения капчи. Это именно то место, которое ищут пользователи по запросу как решить капчу. Долго разбирать этот кусок кода не будем, так как с ним особо проблем не возникало.
Вкратце – скрипт, после каждой загрузки страницы, проверяет наличие капчи на странице и если обнаруживает ее там – решает ее путем отправки на сервер 2капча, если капчи нет, просто продолжает выполнение дальше.
Парсинг
Далее идет участок кода, который отвечает за перебор страниц, их загрузку и прокрутку
Следующий кусок – сбор данных о товарах. Самый важный участок. В этой части скрипт изучает загруженную страницу и забирает оттуда данные, которые указаны, в нашем случае это – название продукта, количество отзывов, цена, URL, оценка товара.
Далее происходит выгрузка указанных данных в папку (для каждой страницы создается свой файл csv, который сохраняется в папку output files), если папка отсутствует, скрипт ее создает.
И завершающий этап – завершение работы и высвобождение ресурсов.
Полный скрипт
Таким образом скрипт отрабатывает без ошибок, но только для вертикальных карточек товара. Вот пример работы скрипта.
Буду рад обсудить его в комментариях, если есть что сказать по делу.
Ну, в этой ситуации, мы как бы эт самое, наши полномочия все... Окончены
Может " пирсинг" а не " парсинг"?
А обычные http запросы перестали работать? Зачем делать отрисовку?
У меня не сработало, я пол дня потратил на эти обычные http Запросы
Полезная реклама, типа