Загрузчик Python YouTube TypeError: ожидаемая строка или байтовоподобный объект - PullRequest
0 голосов
/ 16 мая 2018

Я использую следующий скрипт для загрузки нескольких видео с YouTube, используя python youtube_dl.

from __future__ import unicode_literals
import youtube_dl
import pandas as pd

csv_file = 'movieClips_final.csv'
df = pd.read_csv(csv_file)

print(df.shape[0])
print(df.dtypes)

for index, row in df.iterrows():
    file_name = ['/Users/yashar/Documents/GitHub/video_utils/download_video_youTube_python/' + str(row['movieId']) + '.mp4']
    print(file_name)
    ydl_opts = {'outtmpl': file_name}

    with youtube_dl.YoutubeDL(ydl_opts) as ydl:
         ydl.download(['https://www.youtube.com/watch?v=' + row['youID']])

вот ошибка, которую я получаю:

 (YT_download) d1:download_video_youTube_python yashar$ python   download_videos_YT.py
 6952
 movieId              int64
 title               object
 YTId                object
 Movie_clip_title    object
 youID               object
 dtype: object
         ['/Users/yashar/Documents/GitHub/video_utils/download_video_youTube_python/94.mp4']
 [youtube] 4K8M2EVnoKc: Downloading webpage
 [youtube] 4K8M2EVnoKc: Downloading video info webpage
 [youtube] 4K8M2EVnoKc: Extracting video information
 Traceback (most recent call last):
 File "download_videos_YT.py", line 17, in <module>
 ydl.download(['https://www.youtube.com/watch?v=' + row['youID']])
 File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 2001, in download
url, force_generic_extractor=self.params.get('force_generic_extractor', False))
 File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 803, in extract_info
 return self.process_ie_result(ie_result, download, extra_info)
 File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 857, in process_ie_result
return self.process_video_result(ie_result, download=download)
 File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1635, in process_video_result
self.process_info(new_info)
File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 1713, in process_info
info_dict['_filename'] = filename = self.prepare_filename(info_dict)
File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 665, in prepare_filename
mobj = re.search(FIELD_SIZE_COMPAT_RE, outtmpl)
File "/Users/yashar/miniconda3/envs/YT_download/lib/python3.6/re.py", line 182, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object

Столбец movieId имеет тип int, поэтому я использую str(row['movieId']).Мой загрузчик работает, если я использую ydl_opts={}, но я хочу сохранить видео с определенным именем movieIds, полученным из movieClips_final.csv.

Как вы думаете, в чем проблема?Спасибо за ваши отзывы

1 Ответ

0 голосов
/ 16 мая 2018

outtmpl ожидает строку, но у вас есть:

file_name = ['/Users/yashar/Documents/GitHub/video_utils/download_video_youTube_python/' + str(row['movieId']) + '.mp4']

, которая создает список с именем файла в качестве первого элемента.

Поэтому я думаю, что вместо этого вы хотите:

file_name = '/Users/yashar/Documents/GitHub/video_utils/download_video_youTube_python/' + str(row['movieId']) + '.mp4'
...