вылезает ошибка 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°