К .decode('utf-8')
это отношение не имеет, т.к. °
, который вы видите, это результат кодирования символа в HTML-entities, а не в кодировку документа.
Для того, чтобы заменить символы HTML-entities в обычные, существует функция html.unescape()
, которую вы применяете к переменной temp в produce_output()
.
Проблема в том, что у вас не совсем корректно отрабатывает парсер, и температура попадает не в переменную temp, а в переменную condition, которая при выводе в html.unescape()
не обёрнута.
Нужно либо поправить парсер, либо при выводе так же обернуть значение condition.
P.S: Парсить HTML тем способом, что у вас - довольно ненадёжно, советую почитать про современные технологии парсинга.