def extract_results(html, year, season): soup = BeautifulSoup(html, 'html.parser').find_all(id='searchResultsPanel')[0] soup = soup.find_all('div', recursive=False)[1].find_all('table', limit=1)[0] semester = Semester(year, season) for row in soup.find_all('tr', recursive=False): tds = row.find_all('td', recursive=False) if not tds: continue department, number, section = extract_text(tds[1]).split() course = Course(Department.get(department), number) title = extract_text(tds[2]) units = int(extract_text(tds[3])) instructors = [] for tag in tds[4].find_all('abbr'): instructor_str = tag['title'] if instructor_str == 'Instructor Unassigned': instructors.append(None) else: instructors.append(Faculty(instructor_str, *Faculty.split_name(instructor_str))) meetings = [] for tr in tds[5].find_all('tr'): meetings.append(Meeting.from_str(*(extract_text(tag) for tag in tr.find_all('td')))) cores = list(set(Core.get(extract_text(tag)) for tag in tds[6].find_all('abbr'))) if not cores: cores = [] seats = int(extract_text(tds[7])) enrolled = int(extract_text(tds[8])) reserved = int(extract_text(tds[9])) reserved_open = int(extract_text(tds[10])) waitlisted = int(extract_text(tds[11])) Offering(semester, course, section, title, units, tuple(instructors), tuple(meetings), tuple(cores), seats, enrolled, reserved, reserved_open, waitlisted)