@DiZiNnEs
I love to program =)

Как правильно дать условие о том что «осадков» нету?

Привет, есть сайт https://weather.rambler.ru/v-nur-sultane/3-days/ , нужно парсить 5ea658b000f27870642140.png

Вот мой элемент кода который парсит это самое место:
for first in precipitation.select('span'):
                for second in first.select('span'):
                    output = [e.strip() for e in first if not e.name and e.strip()]
print(output[0] + "%")


Если в span присутствует "Вероятность осадков 70%", то он успешно парсится, а если просто слова "Без осадков" то выдает ошибку:
Traceback (most recent call last):
  File "/home/dizinnes/PycharmProjects/weatherbot/test.py", line 38, in <module>
    nursultan_tomorrow_parser()
  File "/home/dizinnes/PycharmProjects/weatherbot/test.py", line 33, in nursultan_tomorrow_parser
    Осадки: {output[0]}%
UnboundLocalError: local variable 'output' referenced before assignment


Весь код самого парсера:
spoiler
import requests
from bs4 import BeautifulSoup


def nursultan_tomorrow_parser():
    r = requests.get('https://weather.rambler.ru/v-nur-sultane/3-days/')
    html = BeautifulSoup(r.content, 'html.parser')

    for tomorrow in html.select('div._18iJ:nth-child(3)'):
        night_temperature = tomorrow.select_one('span._3k_D:nth-child(2)').text
        for determine_temperature in tomorrow.select('div._3wdR:nth-child(2)'):
            day_temperature = determine_temperature.select_one('span._3k_D').text
        for wind in tomorrow.select('div._1Y0B.wind'):
            wind_result = wind.select_one('span._1DZh').text.lower()
        for precipitation in tomorrow.select('div._1Y0B.precipitationProbability'):
            # preciptation_result = precipitation.select_one('span._1DZh').content
            for first in precipitation.select('span'):
                for second in first.select('span'):
                    output = [e.strip() for e in first if not e.name and e.strip()]

                    # e = []
                    # for e in test2:
                    #     if not e.name and e.strip:
                    #         pass
                    #     else:
                    #         e = ['без осадков']

        result = f'''\
Прогноз погоды на завтра:
Температура ночью: {night_temperature}
Температура днём: {day_temperature}
Скорость ветра: {wind_result}
Осадки: {output[0]}%
'''
        print(result)


nursultan_tomorrow_parser()


Как мне исправить ошибку ?
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Почитать учебник, понять про области видимости переменных и объявить переменную output в том же блоке, где она используется.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galaxy
Во втором случае там нет двух вложенных span, и до строчки output = [e.strip() for e in first if not e.name and e.strip()] дело не доходит.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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