Как исправить '' bytes 'объект не имеет атрибута' findAll '' - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь импортировать videoId из папки pickle, а затем распечатать описание видео YouTube. И я получаю эту ошибку = у объекта 'bytes' нет атрибута 'findAll'i хочу извлечь описание с videoid и title в CSV

cwd=os.getcwd()
parent_folder=os.path.join(cwd,'Data') pickle_out=open("C:/Users/india/Desktop/PARUL/Data/Pickle/vid_ids_dict.pickle","rb")
vid_id_dict=pickle.load(pickle_out)

dataset_folder=os.path.join(parent_folder,"Dataset")
if not os.path.exists(dataset_folder):
os.makedirs(dataset_folder)

csv_file_path= os.path.join(parent_folder,'main.csv')


base = "https://www.youtube.com/watch?v="
for keys, values in vid_id_dict.items():
for key in keys:
    query_dataset_folder=os.path.join(dataset_folder,key)

    if not os.path.exists(query_dataset_folder):
        os.makedirs(query_dataset_folder)

    for VidID in values:

        r = requests.get(base+VidID)
        soup = bs(r.text,'html.parser').encode("utf-8")
        name=VidID+".txt"
        save_description_link=os.path.join(query_dataset_folder,name)

        f= open(save_description_link,"a+")

        for title in soup.findAll('p', attrs={'id': 'eow-description'}):
            description=title.text.strip()
            f.write(description)
            print(description)
        f.close()

        for title in soup.findAll('span', attrs={'class': 'watch-title'}):
            vid_title= title.text.strip()
            print(vid_title)

        with open(csv_file_path, 'a+') as csvfile:
            fieldnames = ['Video id', 'Title','Description','Category']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writerow({'Video id': VidID, 'Title': vid_title, 'Description':description,'Category':key})

error- AttributeError Traceback (последний вызов был последним) в 35 f = open (save_description_link, "a +") 36 ---> 37 для заголовка в soup.findAll ('p', attrs = {'id': 'eow- описание'}): 38 description = title.text.strip () 39 f.write (описание)

AttributeError: у объекта 'bytes' нет атрибута 'findAll'

1 Ответ

0 голосов
/ 24 апреля 2019

Я предполагаю, что вы используете запросы модуль для получения ответов http.

Просто замените ваш код на:

r.encoding = 'utf-8'
soup = bs(req.content, 'html.parser')

Окончательный код выполнения:

for keys, values in vid_id_dict.items():
for key in keys:
    query_dataset_folder=os.path.join(dataset_folder,key)

    if not os.path.exists(query_dataset_folder):
        os.makedirs(query_dataset_folder)

    for VidID in values:

        r = requests.get(base+VidID)
        r.encoding = 'utf-8'
        soup = bs(r.content, 'html.parser')
        name=VidID+".txt"
        save_description_link=os.path.join(query_dataset_folder,name)

        f= open(save_description_link,"a+")

        for title in soup.findAll('p', attrs={'id': 'eow-description'}):
            description=title.text.strip()
            f.write(description)
            print(description)
        f.close()

        for title in soup.findAll('span', attrs={'class': 'watch-title'}):
            vid_title= title.text.strip()
            print(vid_title)

        with open(csv_file_path, 'a+') as csvfile:
            fieldnames = ['Video id', 'Title','Description','Category']
            writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
            writer.writerow({'Video id': VidID, 'Title': vid_title, 'Description':description,'Category':key})
...