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