Создадим простой Telegram-бот, парсящий анекдоты с сайта анекдот.ру и отправляющий их пользователям. Процесс делится на две части: парсинг сайта и создание бота.
Парсинг сайта анекдот.ру
Парсинг — автоматизированный сбор неструктурированной информации и её преобразование в структурированный вид. Это процесс сбора и обработки данных. Будем парсить анекдоты с сайта анекдот.ру (версия с приличными анекдотами).
Парсинг включает три этапа:
- Загрузка данных: Скачивание веб-страницы (страницы с анекдотами).
- Извлечение информации: Анализ HTML-кода страницы с помощью библиотеки BeautifulSoup и выбор нужных элементов (анекдотов), расположенных в тегах <div> с классом text.
- Сохранение данных: Извлечение текста анекдотов и сохранение их в виде списка.
Реализация парсинга на Python
Установим необходимые библиотеки:
pip install requests beautifulsoup4
Код:
import requests
from bs4 import BeautifulSoup
url = "https://anekdot.ru/last/prilichnye" # URL страницы с анекдотами
response = requests.get(url)
response.raise_for_status() # Проверка на ошибки
soup = BeautifulSoup(response.text, 'html.parser')
jokes_tags = soup.find_all('div', class_='text')
clean_jokes = [joke_tag.text.strip() for joke_tag in jokes_tags]
def parser(url):
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
jokes_tags = soup.find_all('div', class_='text')
clean_jokes = [joke_tag.text.strip() for joke_tag in jokes_tags]
return clean_jokes
import random
list_of_jokes = parser(url)
random.shuffle(list_of_jokes)
Функция parser принимает URL и возвращает список очищенных анекдотов. list_of_jokes — перемешанный список анекдотов.
Создание Telegram-бота
Для создания бота используем библиотеку python-telegram-bot.
Установка библиотеки и получение токена
Установим библиотеку:
pip install pyTelegramBotAPI
Для работы бота нужен токен, получаемый на сайте BotFather в Telegram. Создайте бота командой /newbot.
Код Telegram-бота
import telebot
from telebot import types
import random
token = "YOUR_BOT_TOKEN" # Замените на ваш токен
bot = telebot.TeleBot(token)
list_of_jokes = [] # Список анекдотов (заполняется из парсера)
@bot.message_handler(commands=['start'])
def send_welcome(message):
bot.reply_to(message, "Здравствуйте! Чтобы посмеяться, введите любую цифру от 1 до 9.")
@bot.message_handler(func=lambda message: True, content_types=['text'])
def handle_message(message):
text = message.text.lower()
try:
number = int(text)
if 1 <= number <= 9:
if len(list_of_jokes) > 0:
joke = list_of_jokes.pop(0)
bot.reply_to(message, joke)
else:
bot.reply_to(message, "Извините, анекдоты закончились.")
else:
bot.reply_to(message, "Введите цифру от 1 до 9.")
except ValueError:
bot.reply_to(message, "Введите цифру от 1 до 9.")
bot.polling()
Этот код обрабатывает команду /start и сообщения с цифрами от 1 до 9. При вводе цифры бот отправляет случайный анекдот из списка и удаляет его, избегая повторов.
Создан функциональный Telegram-бот, парсящий и отправляющий пользователям анекдоты. Пример демонстрирует базовые принципы работы с парсером и Telegram API на Python. Код можно расширить, добавив функции и обработку ошибок.