Итак, суть такова, что мне нужно парсить расписание для бота ВК
из библиотек для бота я использую vkbottle
сайт: "https://rgsu.net/for-students/timetable/timetable/?filial=ВУЗ?mode=day&group=ЖУР-Б-0-Д-2020-1&date=2024-02-06&week=05"
Была такая попытка реализовать код парсера расписания, но он выводит, что расписания нет. Как я понимаю, что сайт как-то понимает, что это парсер и не выдаёт полный код страницы. Решения.. к сожалению я не нашёл, буду рад помощи:
import aiohttp
from bs4 import BeautifulSoup as BS
from fake_useragent import UserAgent
BASE_URL = "https://rgsu.net/for-students/timetable/timetable/?filial=ВУЗ?mode=day&group=ЖУР-Б-0-Д-2020-1&date=2024-02-06&week=05"
HEADERS = {"User-Agent": UserAgent().random}
bl = BotLabeler()
@bl.private_message(text="/расписание")
async def handle_timetable(message: Message):
async with aiohttp.ClientSession() as session:
async with session.get(BASE_URL, headers=HEADERS) as response:
r = await response.text()
soup = BS(r, "html.parser")
timetable_items = soup.find_all("div", class_="n-timetable-day__item")
if len(timetable_items) == 0:
await message.answer("Расписание не найдено")
else:
for item in timetable_items:
time = item.find("div", class_="n-timetable-day__time")
time_from = time.find("span", class_="n-timetable-day__from").text
time_to = time.find("span", class_="n-timetable-day__to").text
title = item.find("h3", class_="n-timetable-card__title")
subject = title.text
category = item.find("div", class_="n-timetable-card__category")
category_text = category.text
teacher = item.find("div", class_="n-timetable-card__affiliation")
teacher_text = teacher.text.strip()
location = item.find("div", class_="n-timetable-card__address")
location_text = location.text.strip()
auditorium = item.find("div", class_="n-timetable-card__auditorium")
auditorium_text = auditorium.text.strip()
message_text = f"Время: {time_from} - {time_to}\n" \
f"Предмет: {subject}\n" \
f"Категория: {category_text}\n" \
f"Преподаватель: {teacher_text}\n" \
f"Место проведения: {location_text}\n" \
f"Аудитория: {auditorium_text}\n\n"```