Обойти ошибку IndexError: list index out of range
Код:
import requests
from bs4 import BeautifulSoup
r = requests.get('https://pmkedu.pro/schedules/fulltime/11SSA/2020-10-10')
soup = BeautifulSoup(r.text, 'html.parser')
element = soup.find_all('div', class_='card-text')
elem_soup = BeautifulSoup(str(element), 'html.parser')
title = elem_soup.find_all('div')[1].text
element = soup.find_all('div', class_='card-text')
elem_soup = BeautifulSoup(str(element), 'html.parser')
title1 = elem_soup.find_all('div')[6].text
element = soup.find_all('div', class_='card-text')
elem_soup = BeautifulSoup(str(element), 'html.parser')
title2 = elem_soup.find_all('div')[11].text
print('Расписание:')
if '' in title:
print(title)
if '' in title1:
print(title1)
if '' in title2:
print(title2)
Данный код предназначен для парсинга HTML сайта колледжа, для того, чтоб выводить кол-во пар и их название.
Если в расписании 3 пары - все хорошо выводится, если 2 пары - то начинается ошибка в 17 строке, т.к. отсутсвует пара.
Как сделать так, чтобы если выводится пустота, то пропускать без ошибки?
Ответы (1 шт):
Автор решения: Jack_oS
→ Ссылка
import requests
from bs4 import BeautifulSoup
r = requests.get('https://pmkedu.pro/schedules/fulltime/11SSA/2020-10-10')
soup = BeautifulSoup(r.content, 'html.parser')
# один раз находим карточки
cards = soup.find_all('div', class_='card-body')
for card in cards:
# в карточка - один заголовок и время
title = card.find('h4', class_='card-title').text.strip()
time_start = card.find('div', class_='text-right').text.strip()
print(title, time_start)
# и один блок card-text
card_text = card.find('div', class_='card-text')
lessons = card_text.find_all('div', class_='lead')
# с несколькими предметами
for each in lessons:
print(each.text.strip())
выведет:
ССА-20-1/3 Начало: 8.30
1 Информатика
2 Иностранный язык
и не будет "спотыкаться" при изменении количества, при url = 'https://pmkedu.pro/schedules/fulltime/pospelova_ia/2020-10-15' выведет:
КС-20-1/3 Начало: 8.30
1 История
2 Науч.картина мира: Химия
3 Математика
ССА-20-1/3 Начало: 9.40
2 Иностранный язык
3 Науч.картина мира: Химия
4 История
ТКПД-20-1 Начало: 8.30
1 Науч.картина мира: Химия
2 Информатика
3 Русский язык