Корень проблемы в том, что вы пытаетесь перекодировать в cp1251 текст, в котором есть символы, не представленные в этом кодировке. Кроме того, даже если бы у вас получилась перекодировка, метод encode вернул бы байты, а вы файл открыли в текстовом режиме, возникла бы другая ошибка. Вероятно, вам стоит написать так:
with open('test.html', 'w', encode='utf-8') as output_file:
output_file.write(r.text)
P.S. Спасибо
Сергей Паньков за то, что указал на мою невнимательность.