【问题标题】:How to get a list of video URLs from a specific YouTube channel如何从特定的 YouTube 频道获取视频 URL 列表
【发布时间】:2020-06-03 03:52:06
【问题描述】:

我想使用 Python 从特定 YouTube 频道获取视频 URL 列表。

首先,我编写了以下代码。

import os
import time
import requests
import pandas as pd

API_KEY = os.environ['API_KEY']
CHANNEL_ID = 'your_searching_channel_id'

base_url = 'https://www.googleapis.com/youtube/v3'
url = base_url + '/search?key=%s&channelId=%s&part=snippet,id&order=date&maxResults=50'
infos = []

但我不知道下一步。

我阅读了 YouTube API HELP,但我不明白如何构建程序。

【问题讨论】:

  • 但我不知道下一步。我阅读了 YouTube API HELP,无法理解程序的结构。 你能更具体一点吗?顺便说一下,Stack Overflow 不能替代指南、教程或文档。请参阅:help centerHow to Asktour

标签: python youtube-api youtube-data-api


【解决方案1】:

逻辑->

导入必要的库。

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

使用硒。 我正在使用 Chrome 驱动程序。请确保您的 chromedriver 位于运行脚本的同一目录中。

driver = webdriver.Chrome()

提供 Youtube 频道的网址。

url = input("Enter Youtube Channel URL : ")

转到视频部分。

driver.get(url+"/videos")

向下滚动到页面末尾。 因为页面在向下滚动时加载,我们需要注意这一点。

ht=driver.execute_script("return document.documentElement.scrollHeight;")
while True:
    prev_ht=driver.execute_script("return document.documentElement.scrollHeight;")
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    time.sleep(2)
    ht=driver.execute_script("return document.documentElement.scrollHeight;")
    if prev_ht==ht:
        break

查找所有视频的链接。

links=driver.find_elements_by_xpath('//*[@id="video-title"]')
for link in links:
    print(link.get_attribute("href"))

就是这样。

缺点 - 需要 web 驱动程序。比直接从 Youtube API 获取结果要慢。

【讨论】:

    【解决方案2】:

    提供的解决方案假定提供给 driver.get() 的链接是一个 Youtube 播放列表。自行决定修改它。

    import time
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Chrome("pathToChromeDriver")
    driver.get('https://www.youtube.com/watch?v=WN-IW6wOdnI&list=PLs4hTtftqnlBOsOiQ2U1fddASTO9SlRbY')
    
    def collectLinks():
        elements = []
        elems = driver.find_elements_by_xpath("//a[@href]")
        print("Collecting links...")
        for elem in elems:
            elements.append(str(elem.get_attribute("href")))
    
        for i in elements:
            print(i)
    
    collectLinks()
    driver.quit()
    

    其中“pathToChromeDriver”替换为您的 chrome 驱动程序路径。

    其中 'https://www.youtube.com/watch?v=WN-IW6wOdnI&list=PLs4hTtftqnlBOsOiQ2U1fddASTO9SlRbY' 替换为您要查找所有 url 链接的播放列表。

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 2012-10-24
      • 2019-12-07
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 2015-06-07
      • 2014-06-28
      • 2012-10-05
      相关资源
      最近更新 更多