Помогите с парсом сайта
Итак, суть такова, что мне нужно парсить расписание для бота ВК
из библиотек для бота я использую 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"```
Ответы (1 шт):
Для получения расписания, сайт отправляет POST запрос на этот адрес:
https://rgsu.net/for-students/timetable/timetable/novyy-format-den-json.html?filial=ВУЗ
Вы может посмотреть, какие заголовки передаются в него, через мониторинг HTTP-запросов в инструменте разработчика (F12).
Пример кода:
import requests
from bs4 import BeautifulSoup
url = "https://rgsu.net/for-students/timetable/timetable/novyy-format-den-json.html?filial=ВУЗ"
data = {
"place": "first",
"group": "ЖУР-Б-0-Д-2020-1",
"mode": "day",
"date": "2024-02-06",
"week": "05",
"month": "2",
"year": "2024",
}
response = requests.post(url, data=data)
soup = BeautifulSoup(response.json()["html"], "html.parser")
for item in soup.select(".n-timetable-day__item"):
time_from = item.select_one(".n-timetable-day__from").get_text(strip=True)
time_to = item.select_one(".n-timetable-day__from").get_text(strip=True)
subject = item.select_one(".n-timetable-card__title").get_text(strip=True)
category = item.select_one(".n-timetable-card__category").get_text(strip=True)
teacher = item.select_one(".n-timetable-card__affiliation").get_text(strip=True)
location = item.select_one(".n-timetable-card__address").get_text(strip=True)
auditorium = item.select_one(".n-timetable-card__auditorium").get_text(strip=True)
print(
f"Время: {time_from} - {time_to}\n"
f"Предмет: {subject}\n"
f"Категория: {category}\n"
f"Преподаватель: {teacher}\n"
f"Место проведения: {location}\n"
f"Аудитория: {auditorium}\n\n"
)
Вывод:
Время: 8:30 - 8:30
Предмет: Инновационные медиатехнологии в коммуникации
Категория: лекция
Преподователь: Полунина Ольга Сергеевна
Место проведения: ул. В Пика д.4
Аудитория: ауд. 312
Время: 10:10 - 10:10
Предмет: Инновационные медиатехнологии в коммуникации
Категория: лекция
Преподователь: Полунина Ольга Сергеевна
Место проведения: ул. В Пика д.4
Аудитория: ауд. 312
Время: 12:10 - 12:10
Предмет: Инновационные медиатехнологии в коммуникации
Категория: практическое занятие
Преподователь: Полунина Ольга Сергеевна
Место проведения: ул. В Пика д.4
Аудитория: ауд. 312
Время: 13:50 - 13:50
Предмет: Инновационные медиатехнологии в коммуникации
Категория: практическое занятие
Преподователь: Полунина Ольга Сергеевна
Место проведения: ул. В Пика д.4
Аудитория: ауд. 312