вылезает ошибка IndexError: list index out of range

Во время выполнения программы вылезает ошибка: "IndexError: list index out of range". Укажите, по возможности, на ошибку в коде, так как сам ее найти не могу.

def _get_weather(city: str = "Москва") -> list:
    request = requests.get("https://sinoptik.com.ru/погода-" + str(city))
    b = bs4.BeautifulSoup(request.text, "html.parser")

    p3 = b.select('.temperature .p3')
    weather1 = p3[0].getText()
    p4 = b.select('.temperature .p4')
    weather2 = p4[0].getText()
    p5 = b.select('.temperature .p5')
    weather3 = p5[0].getText()
    p6 = b.select('.temperature .p6')
    weather4 = p6[0].getText()
    result = ''
    result = result + ('Утром :' + weather1 + ' ' + weather2) + '\n'
    result = result + ('Днём :' + weather3 + ' ' + weather4) + '\n'
    temp = b.select('.rSide .description')
    weather = temp[0].getText()
    result = result + weather.strip()

    return result

сама ошибка

File "xxx", line 33, in _get_weather
   weather1 = p3[0].getText()
IndexError: list index out of range

Ответы (1 шт):

Автор решения: t4kq

Попробуйте такой вариант

import requests
from bs4 import BeautifulSoup


def _get_weather(city: str = "москва") -> str:
    request = requests.get("https://sinoptik.com.ru/погода-" + str(city))
    b = BeautifulSoup(request.text, "html.parser")

    # block with temperature
    temperature_block = b.find('ul', {
        'class': 'weather__article_main_right-table clearfix'
    })

    # columns
    columns_data = temperature_block.find_all('li')

    # night
    night_from = columns_data[0].find('div', {'class': 'table__temp'}).text
    night_to = columns_data[1].find('div', {'class': 'table__temp'}).text

    # morning
    morning_from = columns_data[2].find('div', {'class': 'table__temp'}).text
    morning_to = columns_data[3].find('div', {'class': 'table__temp'}).text

    # day
    day_from = columns_data[4].find('div', {'class': 'table__temp'}).text
    day_to = columns_data[5].find('div', {'class': 'table__temp'}).text

    # evening
    evening_from = columns_data[6].find('div', {'class': 'table__temp'}).text
    evening_to = columns_data[7].find('div', {'class': 'table__temp'}).text

    # result row
    result = 'Ночью: {} {}\n'.format(night_from, night_to)
    result += 'Утром: {} {}\n'.format(morning_from, morning_to)
    result += 'Днем: {} {}\n'.format(day_from, day_to)
    result += 'Вечером: {} {}\n'.format(evening_from, evening_to)

    return result

print(_get_weather())
Ночью: +22° +21°
Утром: +24° +29°
Днем: +30° +31°
Вечером: +29° +27°
→ Ссылка