User: Пожалуйста, отвечай на русском языке, грамотно.
Assistant: Understood. I will strictly follow these instructions in this conversation.
User: сделай чтоб бот сохранял всю информацию в файл эксель

import requests
from bs4 import BeautifulSoup
import time
import random 
import telebot
import logging
from config import TOKEN

logging.basicConfig(level=logging.INFO)
bot = telebot.TeleBot(TOKEN)

# Временное хранилище для ожидания URL
user_urls = {}

commands = [
    telebot.types.BotCommand('start', 'Запустить бота'),
    telebot.types.BotCommand('info', 'Информация о боте'),
    telebot.types.BotCommand('parse', 'Спарсить объявления'),
    telebot.types.BotCommand('commands', 'Доступные команды'),
    telebot.types.BotCommand('help', 'Помощь'),
]
bot.set_my_commands(commands)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

def parse_avito(url, pages=1):
    results = []
    for page in range(1, pages + 1):
        try:
            response = requests.get(f'{url}&p={page}', headers=headers)
            response.raise_for_status()

            soup = BeautifulSoup(response.text, 'html.parser')
            items = soup.find_all('div', {'data-marker': 'item'})

            for item in items:
                title_element = item.find('h3', itemprop='name')
                price_element = item.find('meta', itemprop='price')
                link_element = item.find('a', itemprop='url')
                date_element = item.find('div', {'data-marker': 'item-date'})

                # Проверяем, был ли найден каждый элемент
                if title_element and price_element and link_element:
                    title = title_element.get_text(strip=True)
                    price = price_element['content']
                    link = 'https://www.avito.ru' + link_element['href']
                    date = date_element.get_text(strip=True) if date_element else "Дата не указана"

                    results.append({
                        'title': title,
                        'price': price,
                        'link': link,
                        'date': date
                    })
                    time.sleep(random.uniform(3, 6))
                else:
                    logging.warning(f'Не удалось найти все необходимые элементы на странице {page}.')
                    continue  

        except Exception as e:
            logging.error(f'Ошибка: {e}')
            break

    return results


@bot.message_handler(commands=['start'])
def start(message):
    bot.reply_to(message, 'Привет! Введите URL для парсинга Авито. Используйте команду /parse.')

@bot.message_handler(commands=['parse'])
def parse(message):
    user_urls[message.chat.id] = True  
    bot.reply_to(message, 'Пожалуйста, введите URL для парсинга.')

@bot.message_handler(func=lambda message: message.chat.id in user_urls)
def get_url(message):
    url = message.text.strip()
    try:
        data = parse_avito(url, pages=3)
        if data:
            message_text = ""
            for item in data:
                message_text += f"{item['title']} - {item['price']}₽\n{item['link']}\n{item['date']}\n\n"
            bot.reply_to(message, message_text)
        else:
            bot.reply_to(message, "Не найдено результатов.")
    except Exception as e:
        bot.reply_to(message, f'Ошибка при парсинге: {e}')
        return  # Не удаляем user_urls, чтобы пользователь мог попробовать снова
    finally:
        del user_urls[message.chat.id]  # Удаляем только после успешного завершения

if __name__ == '__main__':
    logging.info("Бот запущен")
    bot.polling()

Assistant: