CoderCastrov logo
CoderCastrov
Питон

Автоматизация здоровых решений: как Python помог мне найти лучшие низкокарбоновые обеды

Автоматизация здоровых решений: как Python помог мне найти лучшие низкокарбоновые обеды
просмотров
3 мин чтение
#Питон
Table Of Content

    Вы когда-нибудь чувствовали себя разочарованными из-за отсутствия эффективных инструментов для быстрого сравнения вариантов? В моем случае я столкнулся с подобной проблемой при поиске низкокарбоновых обедов на SimpleEat, сайте, предлагающем готовые блюда и обеды для приготовления дома. Хотя на сайте указана пищевая информация в описании каждого продукта, сравнивать их один за другим было утомительной задачей. Поэтому я решил использовать Python для автоматизации этого процесса и упрощения выбора лучших обедов для своих потребностей. В этом посте я покажу вам код и пошаговую инструкцию о том, как технология, автоматизация и Python могут упростить повседневные решения и сэкономить ваше время.

    Столкнувшись с трудностью ручного сравнения пищевой информации об обедах на SimpleEat, я решил обратиться к Python, универсальному и простому в использовании языку программирования, для автоматического извлечения и сравнения этих данных. Python широко используется в анализе данных и автоматизации, что делает его идеальным выбором для этой цели.

    Для выполнения этой задачи я использовал три известные и мощные библиотеки Python:

    При комбинировании этих библиотек я смог создать скрипт на Python, который автоматизирует извлечение и сравнение пищевой информации об обедах на SimpleEat, упрощая процесс выбора и экономя время при поиске здоровых и подходящих вариантов.

    import requests
    import re
    import pandas as pd
    from bs4 import BeautifulSoup
    
    
    def find_nutrition_values(description):
        nutrition_values = []
        if 'пищевая ценность' in description.text:
            for p in description.find_all('p'):
                if 'пищевая ценность' in p.text:
                    info = p.text.split(':')[1].strip()
                    try:
                        kcal, hdc, prot, grasas = [re.findall(r'\d+\.?\d*', s)[0] for s in info.split('/')]
                    except IndexError:
                        kcal, hdc, prot, grasas = 'н/д', 'н/д', 'н/д', 'н/д'
                    nutrition_values.append({
                        'калории': kcal,
                        'углеводы': hdc,
                        'белки': prot,
                        'жиры': grasas
                    })
            return nutrition_values
        else:
            return [{'калории': 'н/д', 'углеводы': 'н/д', 'белки': 'н/д', 'жиры': 'н/д'}]
    
    
    data = []
    page = 1
    
    while True:
        url = f'https://simpleat.com.ar/categoria-producto/comidas-caseras/page/{page}/'
        response = requests.get(url)
    
        if response.status_code == 404:
            break
    
        html = response.content
        soup = BeautifulSoup(html, 'html.parser')
        products = soup.find_all('div', {'class': 'product-small'})
    
        for product in products:
            name = product.find('a', {'class': 'woocommerce-LoopProduct-link'}).text.strip()
            price = product.find('span', {'class': 'woocommerce-Price-amount'}).text.strip()
            link = product.find('a', {'class': 'woocommerce-LoopProduct-link'})['href']
    
            # Проверить, есть ли продукт уже в списке данных
            product_exists = False
            for item in data:
                if item['Продукт'] == name:
                    product_exists = True
                    break
    
            if product_exists:
                continue
    
            desc = requests.get(link)
            desc = BeautifulSoup(desc.content, 'html.parser')
            description = desc.find('div', {'class': 'product-short-description'})
    
            product_data = {
                'Продукт': name,
                'Цена': price,
                'Ссылка': link,
                'Описание': description.text,
            }
    
            try:
                nutrition_values = find_nutrition_values(description)
                for i, values in enumerate(nutrition_values):
                    for key, value in values.items():
                        column_name = f"{key} {i + 1}"
                        product_data[column_name] = value
            except:
                pass
    
            data.append(product_data)
    
        page += 1
    
    df = pd.DataFrame(data)
    df.to_csv('products.csv', index=False)

    Я объясню, как структурирован код и как было выполнено извлечение и анализ данных:

    После того, как у нас есть DataFrame с пищевой информацией о всех доступных обедах на SimpleEat, мы можем проанализировать и использовать результаты для принятия решений о том, какие низкокарбоновые обеды выбрать. Например, мы можем отсортировать DataFrame по столбцу углеводов (HdC) в порядке возрастания, чтобы быстро определить варианты с наименьшим количеством углеводов.

    Данные в Looker Studio

    С этой информацией в руках мы можем легко выбрать обеды, которые лучше всего подходят нашим потребностям и личным предпочтениям. Кроме того, мы можем применять дополнительные фильтры, такие как цена или количество белка, чтобы еще больше уточнить наш выбор.

    Этот подход не ограничивается поиском низкокарбоновых обедов. Его легко адаптировать для поиска различной пищевой информации, такой как высокое содержание белка или низкое содержание жиров, просто изменяя регулярные выражения и столбцы, используемые для сортировки и фильтрации DataFrame. Кроме того, этот метод может быть применен к другим подобным проблемам, таким как анализ меню ресторанов, сравнение вариантов готовой пищи или оценка пищевых добавок.

    Если думать в долгосрочной перспективе, это было бы очень полезной функцией на вашем сайте. Учитывая, что ваш сайт работает на WordPress, вы можете загрузить пищевую информацию в пользовательские поля, разделив каждое значение, а затем добавить фильтры в представления продуктов на основе этих данных.

    Вернемся к нашему коду и в заключение, использование Python и автоматизации позволяет нам эффективно и эффективно решать повседневные проблемы. В этом случае мы показали, как извлекать и анализировать пищевую информацию об обедах на SimpleEat.

    Что бы вы хотели автоматизировать?