Оказалось что библиотека Requests кодирует данные в кодировку Latin-1(ISO-8859-1), сайт же отправляет данные с кодировкой windows-1251. Получалось что библиотека перекодировала данные сайта в другую кодировку.
Решил так:
sourse = requests.get('url')
sourse.encoding='windows-1251' # Теперь requests отдаёт данные в кодировке windows-1251 которая уже нормально читается
В принципе можно остаться на этой кодировке если при записи в файл указать encoding='utf-8'
Ну если прям сильно хочется перекодировать в utf-8, можно раскодировать текст в utf-8 а потом закодировать в него
# if text is windows-1251
text = '123 asdasd 55f'
text = encode('utf-8').decode('utf-8')