@SoySois

Как сделать так чтобы объединённые ячейки тоже показывались в print?

Мне нужно сделать код, который будет писать расписание олимпиад, но я не могу разобраться, что делать с объединёнными ячейками.

import requests
from bs4 import BeautifulSoup

url = "https://vos.olimpiada.ru/2024/school"
response = requests.get(url)

if response.status_code == 200:
    html_content = response.text

    soup = BeautifulSoup(html_content, 'html.parser')

    schedule_table = soup.find('table', {'border': '1'})

    if schedule_table:
        for row in schedule_table.find_all('tr')[1:]:
            cells = row.find_all('td')
            if len(cells) >= 4:
                subject = cells[0].get_text(strip=True)
                grades = cells[1].get_text(strip=True)
                dates = cells[2].get_text(strip=True)
                results_publication = cells[3].get_text(strip=True)

                print(f"Предмет: {subject}")
                print(f"Классы участия: {grades}")
                print(f"Сроки проведения: {dates}")
                print(f"Сроки публикации результатов: {results_publication}")
                print("-" * 50)
    else:
        print("Таблица с расписанием не найдена.")
else:
    print(f"Ошибка при доступе к странице: {response.status_code}")
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Значение объединённой ячейки находится в левой/верхней "оригинальной" ячейке из состава объединённой.
Так что если у тебя есть столбец с объединённой ячейкой, делай там простую логику типа такой:
last_results_publication_value = ''  # тут храним последнее увиденное значение столбца
for row in schedule_table.find_all('tr')[1:]:  # перебираем строки
    cells = row.find_all('td')
    subject = cells[0].get_text(strip=True)
    grades = cells[1].get_text(strip=True)
    dates = cells[2].get_text(strip=True)
    results_publication = cells[3].get_text(strip=True)
    if results_publication:  # если в столбце есть значение
        last_results_publication_value = results_publication  # запоминаем его как последнее виденное
    else:  # а если нет
        results_publication = last_results_publication_value  # используем вместо него последнее виденное
    ...  # дальше используем значения
Ответ написан
Wispik
@Wispik
Проверить у первой клетки наличие атрибута rowspan
if cells[0].get('rowspan'):
    ...

и если он есть, то не принтить данные сразу, а сохранить в переменную и в следующей итерации цикла, добавить к ним данные и вывести из в консоль
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы