CoderCastrov logo
CoderCastrov
Парсер

Как парсить данные с Eatcake с помощью Python

Как парсить данные с Eatcake с помощью Python
просмотров
4 мин чтение
#Парсер

Добро пожаловать снова.... Eatcake - это малайзийский бренд онлайн-доставки тортов. У нас более 800 видов тортов на выбор, испеченных известными международными и местными пекарями. Мы будем использовать Python, поэтому, если у вас нет опыта работы с Python, рекомендуется освежить свои знания по этому языку.

Как всегда, перед парсингом данных с веб-страницы нам нужно определить, какие конкретные данные нам нужно получить. После просмотра страницы я сразу увидел множество различных данных, которые можно получить. В этом проекте мы будем парсить название продукта, ссылку на продукт и цену продуктов на Eatcake.

Давайте начнем!

Основное введение, которое вы, вероятно, можете пропустить, я скопировал из своей другой статьи

Прежде всего, нам понадобится установить Python, убедитесь, что у вас установлен Python и некоторая среда разработки. Selenium pro - это пакет для парсинга данных с веб-страниц, который позволяет нам имитировать веб-браузер с помощью Python. Возможно, лучше иметь более глубокое понимание парсинга данных с веб-страниц. Пакет Selenium pro - https://pypi.org/project/selenium-pro/

pip install selenium-pro

Установка расширения

Загрузите Selenium Auto Code Generator из Chrome Web Store, чтобы избежать копирования и вставки XPath. Этот инструмент помогает и упрощает процесс парсинга данных без необходимости копирования и вставки. Загрузите его здесь - https://chrome.google.com/webstore/detail/selenium-auto-code-genera/ocimgcpcnobcnmclomhhmjidgoiekeaf/related

Начнем!

Теперь, когда у нас настроена среда Python, давайте откроем пустой скрипт Python. Давайте импортируем пакет Selenium pro, который вы, надеюсь, уже установили (просто выполните pip install selenium-pro). После установки импортируйте следующие пакеты:

from selenium_pro import webdriver
import time
from selenium_pro.webdriver.common.keys import Keys

Мы используем браузер Google Chrome в качестве нашего графического интерфейса, но вы можете использовать другие браузеры в Selenium pro, если хотите использовать другой браузер, пожалуйста, используйте его! Убедитесь, что соответствующий браузер установлен на вашем компьютере.

Теперь, внутри Selenium pro, нам нужно определить наш веб-браузер, поэтому давайте сделаем это с помощью следующей строки кода:

driver = webdriver.Start()

Я рекомендую запустить весь ваш код до этого момента и проверить, успешно ли он выполняется. Если да, вы практически готовы продолжать!

Пайплайн Eatcake

Далее следует интересная часть, нажмите на расширение DK, которое мы установили ранее, и нажмите "начать запись". Эта задача определенно не будет сложной, но к счастью у вас есть я, чтобы помочь.

Откройте веб-сайт eatcake и добавьте задержку в 3 секунды для загрузки веб-сайта, затем выполните поиск ключевого слова на веб-сайте и нажмите Enter. Чтобы добавить событие ожидания, щелкните правой кнопкой мыши на экране, выберите "ожидание" -> 3. Теперь, если вы нажмете на расширение, вы увидите код уже в расширении, как показано ниже.

# открыть URL в браузере
driver.get('https://www.eatcaketoday.com/?gclid=EAIaIQobChMI9MSQ4JuS-gIVKMIWBR2DzQT4EAAYASAAEgLJJfD_BwE')
time.sleep(3)

Отлично! Это указывает нашему браузеру Chrome Python на этот конкретный веб-сайт, функция "time.sleep(3)" просто говорит Python подождать 3 секунды перед продолжением, это необязательно, но я все равно добавил это.

После этого расширение будет искать Id с помощью driver.find_element_by_pro и выполнит click(), событие click будет кликать по Id.

# нажать на поле ввода
driver.find_element_by_pro('8xdnT4busuNtxrR').click()

и send_keys('cake') введет ключевое слово "cake", а send_keys(Keys.ENTER) нажмет Enter.

# ввести текст в поле ввода
driver.find_element_by_pro('kjUmXjz4TIwRMxB').send_keys('cake')
# нажать клавишу Enter
driver.switch_to.active_element.send_keys(Keys.ENTER)

Скопируйте код из расширения и протестируйте код до этого момента..

Получение данныхОтлично! Теперь давайте возобновим запись. После ввода ключевого слова на веб-сайте eatcake наведите указатель на заголовок продукта, затем щелкните правой кнопкой мыши и выберите "скрапинг" -> "текст", чтобы получить текст продукта.

Точно так же вы можете получить ссылку и цену. В расширении ваши действия будут воспроизводиться следующим образом:

# получить текст элемента
title = list_element.find_element_by_pro('6M9I5IwvHh502JJ').text
# получить текст элемента
price = list_element.find_element_by_pro('Efxo8dz6xIYBoof').text
# получить ссылку элемента
link = list_element.find_element_by_pro('5KbP1gBdJnEmMXt').get_attribute('href')

Мы закончили.. верьте или нет

Полный кодВ случае, если вы застряли или запутались, вот весь код для этого проекта:

from selenium_pro import webdriver
import time
from selenium_pro.webdriver.common.keys import Keys
driver = webdriver.Start()
# открыть URL в браузере
driver.get('https://www.eatcaketoday.com/?gclid=EAIaIQobChMI9MSQ4JuS-gIVKMIWBR2DzQT4EAAYASAAEgLJJfD_BwE')
time.sleep(3)
# нажать на поле ввода
driver.find_element_by_pro('8xdnT4busuNtxrR').click()
# ввести текст в поле ввода
driver.find_element_by_pro('kjUmXjz4TIwRMxB').send_keys('cake')
# нажать клавишу Enter
driver.switch_to.active_element.send_keys(Keys.ENTER)
time.sleep(3)
# получить текст элемента
title = list_element.find_element_by_pro('6M9I5IwvHh502JJ').text
# получить текст элемента
price = list_element.find_element_by_pro('Efxo8dz6xIYBoof').text
# получить ссылку элемента
link = list_element.find_element_by_pro('5KbP1gBdJnEmMXt').get_attribute('href')

Запуск этой программыТеперь, чтобы запустить эту программу, скопируйте код из расширения и сохраните его как файл .py > откройте терминал / командную строку и введите следующую строку:

python3 ПУТЬ/К/ВАШЕМУ/ФАЙЛУ.PY

Или, если вы используете среду разработки, такую как Pycharm, просто запустите программу в ней. При запуске этой программы вы увидите, что открывается браузер Chrome, он будет ждать несколько секунд, а затем выведет данные в консоль Python!

Поздравляю! Я рекомендую поискать способы улучшить этот проект: можно ли добавить интерфейс, где люди могут размещать свои ссылки? Можно ли добавить цикл для парсинга всех ссылок и текста со всех страниц? В противном случае, вам следует гордиться собой за то, что вы прошли этот учебник!