如何用 Python 提取 youtube 数据?

先决条件: 美丽组合

YouTube 频道的 YouTube 统计数据可以用于分析,也可以使用 python 代码提取。可以检索许多数据,如视图计数、订阅计数和视频计数。本文讨论了两种方法。

方法一:使用 YouTube API

首先,我们需要生成一个应用编程接口密钥。您需要一个谷歌帐户来访问谷歌应用编程接口控制台,请求一个应用编程接口密钥,并注册您的应用程序。你可以使用谷歌 API页面进行操作。

为了提取数据,我们需要我们想要查看其统计数据的 YouTube 频道的频道 id。要获取频道 id,请访问特定的 YouTube 频道并复制网址的最后一部分(在下面给出的例子中,使用了极客频道的频道 id)。

接近

  • 首先创建 youtube_statistics.py
  • 在这个文件中使用 YTstats 类提取数据并生成一个 json 文件将所有的数据提取出来。
  • 现在创建 main.py
  • 在主导入 youtube_statistics.py 中
  • 添加应用编程接口密钥和通道标识
  • 现在使用第一个文件,对应于给定密钥的数据将被检索并保存到 json 文件中。

示例:

main.py 文件的代码:

Python 3

from youtube_statistics import YTstats

# paste the API key generated by you here
API_KEY = "AIzaSyA-0KfpLK04NpQN1XghxhSlzG-WkC3DHLs"

 # paste the channel id here
channel_id = "UC0RhatS1pyxInC00YKjjBqQ" 

yt = YTstats(API_KEY, channel_id)
yt.get_channel_statistics()
yt.dump()

【youtube _ statistics.py 文件代码:

Python 3

import requests
import json

class YTstats:

    def __init__(self, api_key, channel_id):
        self.api_key = api_key
        self.channel_id = channel_id
        self.channel_statistics = None

    def get_channel_statistics(self):
        url = f'https://www.googleapis.com/youtube/v3/channels?part=statistics&id={self.channel_id}&key={self.api_key}'

        json_url = requests.get(url)
        data = json.loads(json_url.text)

        try:
            data = data["items"][0]["statistics"]
        except:
            data = None

        self.channel_statistics = data
        return data

    def dump(self):
        if self.channel_statistics is None:
            return

        channel_title = "GeeksForGeeks"
        channel_title = channel_title.replace(" ", "_").lower()

        # generate a json file with all the statistics data of the youtube channel
        file_name = channel_title + '.json'
        with open(file_name, 'w') as f:
            json.dump(self.channel_statistics, f, indent=4)
        print('file dumped')

输出:

方法二:使用美容套装

美丽的汤是一个 Python 库,用于从 HTML 和 XML 文件中提取数据。在这种方法中,我们将使用“美丽组”和“Selenium”从 YouTube 频道中抓取数据。这个程序会告诉你视频的视图、发布时间、标题和网址,并使用 Python 的格式打印出来。

接近

  • 导入模块
  • 提供要获取其数据的通道的 url
  • 提取数据
  • 显示提取的数据。

示例:

Python 3

# import required packages
from selenium import webdriver
from bs4 import BeautifulSoup

# provide the url of the channel whose data you want to fetch
urls = [
    'https://www.youtube.com/channel/UC0RhatS1pyxInC00YKjjBqQ'
]

def main():
    driver = webdriver.Chrome()
    for url in urls:
        driver.get('{}/videos?view=0&sort=p&flow=grid'.format(url))
        content = driver.page_source.encode('utf-8').strip()
        soup = BeautifulSoup(content, 'lxml')
        titles = soup.findAll('a', id='video-title')
        views = soup.findAll(
            'span', class_='style-scope ytd-grid-video-renderer')
        video_urls = soup.findAll('a', id='video-title')
        print('Channel: {}'.format(url))
        i = 0  # views and time
        j = 0  # urls
        for title in titles[:10]:
            print('\n{}\t{}\t{}\thttps://www.youtube.com{}'.format(title.text,
                                                                   views[i].text, views[i+1].text, video_urls[j].get('href')))
            i += 2
            j += 1

main()

输出