請啟用 JavaScript 來查看內容

[Python爬蟲實例] YouTube-使用 youtube_dl 套件

前言

在之前 [Python爬蟲實例] YouTube-使用 YouTube Data API 教學是使用 YouTube Data API 來取得影片相關資訊,不過如果你只是想抓取影片基本訊息,但不想麻煩去申請 API Key,或許可以改使用一個非常有名的套件 — youtube_dl。

備註:此文僅教育學習,切勿用作商業用途,個人實作皆屬個人行為,本作者不負任何法律責任

套件

本次主要使用到的套件:

📘 爬蟲程式

youtube_dl 主要提供從 YouTube 及其他多個網站下載影片,使用方法非常簡單:

1
2
with youtube_dl.YoutubeDL() as ydl:
        info = ydl.extract_info("影片網址", download=False)

因為我們只是想取得影片資訊,並沒有要下載影片,因此 download 帶入 False。

函式回傳的資料即是 dict (字典) 資料型別,我們可以只挑選需要的內容。
程式碼如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from pprint import pprint
import youtube_dl


def get_video_info(youtube_url):
    video_info = {}

    with youtube_dl.YoutubeDL() as ydl:
        info = ydl.extract_info(youtube_url, download=False)
        # pprint(info)
        video_info['ID'] = info.get('id')
        video_info['標題'] = info.get('title')
        video_info['影片縮圖'] = info.get('thumbnail')
        video_info['上傳者'] = info.get('uploader')
        video_info['上傳者網址'] = info.get('uploader_url')
        video_info['影片長度(秒)'] = info.get('duration')
        video_info['觀看次數'] = info.get('view_count')
        video_info['留言數'] = info.get('comment_count') # -
        video_info['喜歡數'] = info.get('like_count')
        video_info['不喜歡數'] = info.get('dislike_count')
        video_info['平均評分'] = info.get('average_rating')
        video_info['描述'] = info.get('description')
        video_info['標籤'] = info.get('tags')
        video_info['網頁網址'] = info.get('webpage_url')
        video_info['上傳日期'] = info.get('upload_date')
    return video_info


if __name__ == '__main__':
    video_info = get_video_info('https://www.youtube.com/watch?v=YculJhe_iPk')
    pprint(video_info)

回傳影片相關資訊結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{'ID': 'YculJhe_iPk',
 '上傳日期': '20201206',
 '上傳者': 'Onion Man',
 '上傳者網址': 'http://www.youtube.com/channel/UCzxN4G3s9uR9ao5_O5DoXmA',
 '不喜歡數': 230,
 '喜歡數': 13735,
 '平均評分': 4.9341211,
 '影片縮圖': 'https://i.ytimg.com/vi_webp/YculJhe_iPk/maxresdefault.webp?v=5fccb8d3',
 '影片長度(秒)': 299,
 '描述': '你的請客值有多少?\n'
       '\n'
       '【訂閱】及觀看洋蔥更多影片: https://goo.gl/ijP3Eb\n'
       '\n'
       '工作合作:service@weido.biz\n'
       'Onion Man 百萬追蹤粉絲團:goo.gl/Z5CSvw\n'
       '\n'
       '最新阿文貼圖:https://reurl.cc/GxYjA\n'
       '\n'
       '第一代阿文line貼圖:https://reurl.cc/Wroxx\n'
       '\n'
       '洋蔥私生活IG:https://www.instagram.com/onionman__/\n'
       '\n'
       '\n'
       '運動漫畫裡的中二老梗劇情\n'
       '►第一集:https://youtu.be/cMoV1rPH35k\n'
       '►第二集:https://youtu.be/iW7LM00lny0\n'
       '►第三集:https://youtu.be/2G5wu61uCM0\n'
       '►第四集:https://youtu.be/-rP1abYv8n4\n'
       '\n'
       'Onion Man 關鍵字:\n'
       '中二 肥宅 單身漢 單身 魯蛇 屌絲 肥宅',
 '標籤': ['onion', 'man', '阿文', '黑鳳梨', '插畫', '爆笑', '搞笑', '玩笑',...'綜藝大熱門', 'de', 'jun', '上班不要看'],
 '標題': 'Onion Man | 我不想出錢   但要裝闊',
 '留言數': None,
 '網頁網址': 'https://www.youtube.com/watch?v=YculJhe_iPk',
 '觀看次數': 555986}

* 我發現它 YouTube 好像無法取得留言數。🤔

但它是需要透過影片網址來取得影片相關資訊,如果我們想要像上次一樣,針對某個頻道抓取最近的五部影片,可能就要先透過網路爬蟲取得網頁的方式來獲取影片網址,才可以使用了 youtube_dl 套件。

完整程式碼

附上完整程式碼:youtube_dl.py
(對超連結右鍵 > 另存連結為)

延伸練習

  1. 在上方教學中,我們是透過影片網址取得影片資訊。
    那你可以寫支程式自動抓取發燒影片的前10名影片資訊嗎?

  2. youtube_dl 套件最主要是用來從 YouTube 及其他多個網站下載影片,你何不來嘗試看看呢?

結語

如果你只是想取得影片的基本資訊,使用 youtube_dl 套件會比較容易哦~

我有陸續寫一些網站的Python網路爬蟲實例,如果你正好是剛開始想學爬蟲的新手、想知道某個網站如何爬取資料,或者遇到其他問題,歡迎過來參考和在底下留言~👇




參考:
youtube-dl GitHub


有夢就去追啊,愣在原地做什麽。


🔻 如果覺得喜歡,歡迎在下方獎勵我 5 個讚~
分享

Jia
作者
Jia
軟體工程師 - Software Engineer