Атрибут AttributeError: 'bytes' не имеет атрибута 'findAll' потому что в вашем коде вы делаете:
soup = BeautifulSoup(source, 'lxml').encode("utf-8")
То, что происходит, вы конвертируете str до byte путем кодирования строки. encode используется для преобразования str в байт с выбранной кодировкой.
Никогда нельзя манипулировать с байтами внутри программы.Вместо этого используйте принцип Unicode Sandwitch.Что конвертировать байт в стр при чтении, делать вещи с стр , а затем конвертировать стр в байт взапись в вывод.
Так что просто используйте str внутри программы, вместо байтов как,
soup = BeautifulSoup(source, 'lxml')