def get_soup_by_url(current_url): page = requests.get(current_url) # Загрузим страницу page.encoding = 'utf-8' # Поставим верную кодировку soup = BeautifulSoup(page.text, "lxml") # Распознаем HTML-код return soup # Вернём готовый к использованию код def parse_table_to_list(soup): #создаем список из таблицы list_1 = [] for tr in soup.find_all("tr"): # ищем строки в таблице list_1.append(tr.find_all("td")) # записываем в список элементы строки return list_1 # Возвращаем полученный список в основную программу import requests from bs4 import BeautifulSoup base_url = input() lastname = input() result = input().split(",") current_page = '' current_url = base_url + current_page urls = [] # Создадим множество, где будем хранить адреса всех страниц сайта while True: soup = get_soup_by_url(current_url) urls.append(current_url) # Добавим адрес открытой страницы в множество адресов next_link = soup.find('a', text='Следующая таблица результатов') # Найдём тег с адресом новой страницы if not next_link: # Если ссылки на новую страницу нет break # — закончим поиск страниц, выйдя из цикла new_page = next_link.get('href') # Узнаем из этого тега адрес current_url = base_url + new_page # Подготовимся загружать новую страницу tables = [] for url in urls: # парсим и создаем список значений таблицы soup = get_soup_by_url(url) table = parse_table_to_list(soup) tables.append(table) new_tables = [] for i in range(len(tables)): # убираем пустые значения new_tables.append([value for value in tables[i] if value]) dict_list = [] for a in range(len(new_tables)): for b in range(len(new_tables[a])): # берем элементы из каждой строки и записывем в словарь line = new_tables[a][b] dict_1 = { "#": line[0].text, "Фамилия": line[1].text, "TSS": line[2].text, "TES": line[3].text, "PCS": line[4].text, "SS": line[5].text, "TR": line[6].text, "PE": line[7].text, "CO": line[8].text, "IN": line[9].text } dict_list.append(dict_1) l = [] for dict in dict_list: if lastname.lower() in dict.get("Фамилия").lower(): for res in result: l.append(dict.get(res)) print(*l[:len(urls)]) print(*l[len(urls):])
Добрый день!
Решил задачу, но она не проходит скрытые тесты. С открытыми все нормально. Есть подозрение, что ошибка в том, как я вывожу итоговые значения . Но по-другому у меня не получается…
Тестовый ввод:
http://online.hse.ru/python-as-foreign/tasks/fs/example/
Плисецкий
TSS,IN,TES