它看起來像傳遞--list-thumbnails會將url返回到縮略圖圖像,但它只會在調用os.system()時輸出到屏幕。
下面是不是最漂亮的,但它是讓YouTube的-DL的輸出轉換成字符串中使用子進程,解析它來獲取地址,然後用請求下載的快速工作示例:
import re
import requests
import subprocess
with open('results.txt') as f:
for line in f:
proc = subprocess.Popen(['youtube-dl', '--list-thumbnails', line], stdout=subprocess.PIPE)
youtubedl_output, err = proc.communicate()
imgurl = re.search("(?P<url>https?://[^\s]+)", youtubedl_output).group('url')
r = requests.get(imgurl)
if r.status_code == 200:
with open(imgurl.split('/')[4] + '.jpg', 'wb') as file:
for chunk in r.iter_content(1024):
file.write(chunk)
希望這有助於!
我收到了一些運行此錯誤的錯誤。你有沒有跑過這個例子,它工作正常? 我似乎無法理解你在imgurl上做了什麼。 謝謝! – TheOlDirtyBastard
對不起,我的工作太快了。我使用pycharm在windows中工作,但在閱讀你的評論後在linux上嘗試過,並得到這個錯誤。 AttributeError:'NoneType'對象沒有屬性'group' 我錯誤地添加了shell = True出於我的壞習慣。在這裏不需要,並且刪除它可以修復錯誤。 我也能夠使它更清潔。我忘記了proc.communicate返回一個元組。拆包,讓我跳過一小部分不必要的解析[:-4]。我使用更正編輯了代碼。希望他們這次能夠工作! –
工作就像一個魅力。非常感謝。我現在明白了!乾杯:) – TheOlDirtyBastard