Python бот: парсинг анекдотов с анекдот.ру

Создадим простой Telegram-бот, парсящий анекдоты с сайта анекдот.ру и отправляющий их пользователям. Процесс делится на две части: парсинг сайта и создание бота.

Парсинг сайта анекдот.ру

Парсинг — автоматизированный сбор неструктурированной информации и её преобразование в структурированный вид. Это процесс сбора и обработки данных. Будем парсить анекдоты с сайта анекдот.ру (версия с приличными анекдотами).

Парсинг включает три этапа:

  1. Загрузка данных: Скачивание веб-страницы (страницы с анекдотами).
  2. Извлечение информации: Анализ HTML-кода страницы с помощью библиотеки BeautifulSoup и выбор нужных элементов (анекдотов), расположенных в тегах <div> с классом text.
  3. Сохранение данных: Извлечение текста анекдотов и сохранение их в виде списка.

Реализация парсинга на 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. Код можно расширить, добавив функции и обработку ошибок.

Что будем искать? Например,программа