не получается сделать парсинг сайта через bs4 с POST

Есть сайт, я хочу оттуда выводить текстом расписание. С отправкой запроса я вроде справляюсь, а вот взять само расписание ни как не получается. Подскажите как правильно сделать

import requests
from bs4 import BeautifulSoup

group_id = "93"
date_from = "02.10.2024"
date_to = "03.10.2024"

url = 'https://www.tolgas.ru/services/raspisanie/?id=0'
payload = {
    'vr': group_id,  # Идентификатор группы
    'from': date_from,  # Начальная дата
    'to': date_to,  # Конечная дата
    'submit_button': 'Показать'
}

response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, 'html.parser')

вот я допустим хочу взять хотя бы вот эту дату дата

используя этот код

soup.find_all('div', class_="div.timetable-frame__row:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(2)")
print(soup.find_all)

но в итоге получаю видимо целый сайт, т.к. выводит очень много текста, не только тег div но и все остальные


Ответы (1 шт):

Автор решения: Ben Puls

Вы сделали почти всё верно. Единственное, вы не смогли найти класс этого тега, за счёт этого у вас не получилось найти дату.

При условии, что вы парсите ту же страницу, что и в вопросе, класс блока <div> будет timetable-frame-current-date__text timetable-frame-current-date__text--2 text-lead.

Если вы хотите найти все актуальные даты занятий, воспользуйтесь методом find_all(). Этот метод выведет все теги с заданными параметрами.

Итого получаем:

import requests
from bs4 import BeautifulSoup

group_id = "93"
date_from = "02.10.2024"
date_to = "03.10.2024"

url = 'https://www.tolgas.ru/services/raspisanie/?id=0'
payload = {
    'vr': group_id,  # Идентификатор группы
    'from': date_from,  # Начальная дата
    'to': date_to,  # Конечная дата
    'submit_button': 'Показать'
}

response = requests.post(url, data=payload)
soup = BeautifulSoup(response.text, 'html.parser')

class_name = "timetable-frame-current-date__text timetable-frame-current-date__text--2 text-lead"

all_tags = soup.find_all("div", 
                     class_=class_name)

dates = [tag.text.strip() for tag in tags]

И после этого через list comprehension получаем:

['07.10.2024', '09.10.2024', '10.10.2024', '12.10.2024']

По аналогии можно найти названия занятий и преподавателей и красиво отобразить через словарь, например.

→ Ссылка