Aiogram 3 — это асинхронный фреймворк для создания ботов в Telegram, предназначенный для работы с API Telegram. Он не предназначен для парсинга контента из интернета. Для парсинга веб-сайтов и извлечения информации, включая изображения, можно использовать другие инструменты, например, BeautifulSoup или Scrapy в сочетании с библиотекой aiohttp для асинхронных запросов.
Чтобы реализовать бота, который отправляет случайные картинки с сайта, вам надо сделать следующее:
1. Соберите ссылки на изображения с сайта, используя инструменты для парсинга.
2. Сохраните эти ссылки в базу данных или файл.
3. Настройте вашего бота так, чтобы он мог отправлять изображения в чат по запросу.
Примерный код для парсинга изображений с сайта с использованием aiohttp и BeautifulSoup может выглядеть так:
```python
import aiohttp
from bs4 import BeautifulSoup
import random
async def fetch_html(url: str):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def parse_images_from_website(url: str):
html = await fetch_html(url)
soup = BeautifulSoup(html, 'html.parser')
images = [img['src'] for img in soup.find_all('img') if 'src' in img.attrs]
return images
async def main():
url = 'http://example.com'
images = await parse_images_from_website(url)
# Тут вы можете сохранить полученные ссылки на изображения в файл или базу данных
print(images)
# Помните, что для выполнения асинхронных функций надо использовать event loop
import asyncio
asyncio.run(main())
```
Теперь, чтобы интегрировать это с ботом на Aiogram, давайте создадим базовый пример отправки случайной картинки пользователю:
```python
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import InputFile
API_TOKEN = 'ВашToken'
# Создаём бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
# Предположим, что у вас уже есть список ссылок на изображения в images_urls
images_urls = ['http://example.com/image1.jpg', 'http://example.com/image2.jpg', ...]
@dp.message_handler(commands=['random_image'])
async def send_random_image(message: types.Message):
image_url = random.choice(images_urls) # Выбираем случайную картинку
async with aiohttp.ClientSession() as session:
async with session.get(image_url) as resp:
if resp.status != 200:
await message.reply("Не удалось получить изображение.")
return
data = await resp.read()
await message.reply_photo(photo=data)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
```
В этом примере у нас есть команда `/random_image`, которая отправляет пользователю случайное изображение из списка `images_urls`. Не забудьте заменить плейсхолдер `API_TOKEN` на реальный токен вашего бота. Также стоит иметь в виду, что хранение всех ссылок на картинки в переменной — не самый масштабируемый и надежный способ. Рекомендуется использовать базу данных для хранения URL-адресов и другой информации.
Необходимо иметь в виду, что множество сайтов имеют защиту от автоматического парсинга, а также могут быть законные проблемы, связанные с авторскими правами при загрузке и распространении изображений. Убедитесь, что