не получается сделать парсинг сайта через 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 шт):
Вы сделали почти всё верно. Единственное, вы не смогли найти класс этого тега, за счёт этого у вас не получилось найти дату.
При условии, что вы парсите ту же страницу, что и в вопросе, класс блока <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']
По аналогии можно найти названия занятий и преподавателей и красиво отобразить через словарь, например.