CoderCastrov logo
CoderCastrov
Парсер

Как парсить список рецептов пищи* за 5 минут

Как парсить список рецептов пищи* за 5 минут
просмотров
2 мин чтение
#Парсер

Каждый день я просыпаюсь в 7 утра, заглядываю в холодильник и задаю себе вопрос: Что я буду есть сегодня?

Каждую неделю, когда я иду в супермаркет, я задаю себе очень похожий вопрос: Какую еду мне нужно купить?

По моему мнению, один сайт помогает мне ответить на эти вопросы: https://www.marmiton.org/

Главная страница Marmiton

Этот французский сайт предлагает широкий выбор рецептов. Сегодня я предлагаю вам показать, как парсить и получать список рецептов с Marmiton с URL-адресами, ведущими к полному рецепту.

1. Требования

Первое требование, конечно, это наличие Python и IDE. Я лично использую JupyterLab, который я скачал с помощью Anaconda. Нам также понадобится эмулятор Google Chrome, который будет работать с Selenium. Убедитесь, что вы скачали Chromedriver. Вы можете получить его здесь: https://chromedriver.chromium.org/downloads

Убедитесь, что вы скачали версию, соответствующую вашей текущей версии Google Chrome.

2. Парсинг URL с целевой страницы

В вашем коде Python определите URL-адрес, который вы хотите получить:

url = "https://www.marmiton.org/recettes/index/categorie/plat-principal/"

С помощью этой строки я определяю свою цель как главную страницу "основных блюд".

Затем запустите Selenium, чтобы сгенерировать целевую веб-страницу:

# Библиотеки
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException, TimeoutException
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

# Код
options = Options()
options.headless = True

path = вставьте сюда путь к chromedriver

DRIVER_PATH = path
s = Service(DRIVER_PATH)
browser = webdriver.Chrome(service=s)

browser.get(url)

3. Получение названий рецептов

Здесь идея заключается в получении названий рецептов, присутствующих на странице. Для этого мы будем использовать Selenium, чтобы получить все html-теги, содержащие названия рецептов.

Мы откроем "инструменты разработчика" с помощью CTRL+Shift+I

Developer Tools

Затем мы выберем инструмент "выбрать элемент", щелкнув на стрелку в верхнем левом углу представления инструментов разработчика.

Select an element

Затем мы щелкаем по элементу, который мы хотим идентифицировать, в данном случае - заголовок рецепта: в инструменте разработчика мы видим, что мы можем получить заголовок из

<h4 class="recipe-card__title">Blanquette de veau : recette traditionnelle</h4>

Затем мы просим Selenium получить все html-теги h4, у которых атрибут "recipe-card__title".

# Сбор данных
time.sleep(2)

# Получение заголовков
title_list = browser.find_elements(By.XPATH, '//h4[@class="recipe-card__title"]')

Следующий шаг - сохранить различные заголовки в DataFrame с помощью цикла:

titles = []

for x in title_list:
    titles.append(x.text)

df = pd.DataFrame(titles)
df.columns = ['titles']
df

И вот, у вас есть список рецептов, чтобы вдохновиться для ваших повседневных блюд:

Recipes

Французские рецепты