Почему возвращается пустой список и как это исправить?

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023

Почему возвращается пустой список и как это исправить? Вот мой код:

import requests
from bs4 import BeautifulSoup

url = 'https://m-raspisanie.asu.edu.ru/student/%D0%94%D0%98%D0%A421'


response = requests.get(url=url)

soup = BeautifulSoup(response.text, 'lxml')  # Полная страница расписания
soup1 = soup.find('div', class_='vot_den current-day')  # Страница сегодняшнего дня(занятия числителя и расписания)
if soup1 is not None:
    soup2 = soup1.find_all('div', class_='den-content   chislit-day')  # Строка в таблице
    print(soup2)

Ответы

▲ 0Принят

У вас в поиске лишний класс chislit-day, сейчас дни описаны классом znamenat-day. Просто уберите его, т.к. он служит только для дополнительной фильтрации

Переписал парсер:

  • Использовал html.parser - он встроенный
  • Использовал css-селекторы для поиска через методы select/select_one - с ними короче выходит
  • Добавил пример вытаскивания значений, но для ch_zn наверняка понадобится дополнительный парсинг, который не буду описывать

Пример:

import requests
from bs4 import BeautifulSoup


url = 'https://m-raspisanie.asu.edu.ru/student/%D0%94%D0%98%D0%A421'
rs = requests.get(url)

soup = BeautifulSoup(rs.text, 'html.parser')  # Полная страница расписания
current_day_el = soup.select_one('.vot_den.current-day')
if current_day_el:
    for para_el in current_day_el.select('.den-content'):
        number = para_el.select_one('.npara').text
        time = para_el.select_one('.time-para').get_text(separator='-')
        ch_zn = para_el.select_one('.ch-zn').get_text(strip=True)
        print(number, time, ch_zn)

Результат:

1 пара 08:30-09:50 П.Иностранный язык (профессионально-ориентированный)гр.2Трофимова А.Н.ауд.ТП.714П.Иностранный язык (профессионально-ориентированный)гр.2Трофимова А.Н.ауд.ТП.714
2 пара 10:05-11:25 П.Элективные курсы по физической культуре и спортуП.Элективные курсы по физической культуре и спорту
3 пара 11:40-13:00 П.Иностранный язык (профессионально-ориентированный)гр.1Лысикова И.В.ауд.ТО.501П.Иностранный язык (профессионально-ориентированный)гр.1Лысикова И.В.ауд.ТО.501
5 пара 14:50-16:10 Л.Техническая защита информацииДемина Р.Ю.ДОТ