Почему AttributeError: у объекта 'bytes' нет атрибута 'findAll' - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь получить данные YouTube со страницы трендов.Получена ошибка

from bs4 import BeautifulSoup
import requests
import csv

source = requests.get("https://www.youtube.com/feed/trending").text
soup = BeautifulSoup(source, 'lxml').encode("utf-8")

csv_file = open('YouTube.csv','w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Title', 'Description'])

for content in soup.findAll('div', class_= "yt-lockup-content"):
#for content in soup.find_all('div', class_= "yt-lockup-content"):
    print (content)

1 Ответ

1 голос
/ 28 сентября 2019

Атрибут AttributeError: 'bytes' не имеет атрибута 'findAll' потому что в вашем коде вы делаете:

soup = BeautifulSoup(source, 'lxml').encode("utf-8")

То, что происходит, вы конвертируете str до byte путем кодирования строки. encode используется для преобразования str в байт с выбранной кодировкой.

Никогда нельзя манипулировать с байтами внутри программы.Вместо этого используйте принцип Unicode Sandwitch.Что конвертировать байт в стр при чтении, делать вещи с стр , а затем конвертировать стр в байт взапись в вывод.

Так что просто используйте str внутри программы, вместо байтов как,

soup = BeautifulSoup(source, 'lxml')
...