【问题标题】:Python Script to create a list of video titles of a YouTube playlist containing more than 100 videos用于创建包含 100 多个视频的 YouTube 播放列表的视频标题列表的 Python 脚本
【发布时间】:2019-09-23 08:43:28
【问题描述】:

我正在使用下面提供的代码创建一个列表,其中包含公共 YouTube 播放列表中的视频标题。它适用于包含少于 100 个视频的播放列表。对于包含超过 100 个视频的播放列表,播放列表中前 100 个视频的标题将被添加到列表中。我认为这种行为背后的原因是因为当我们在浏览器中加载相同的页面时,会加载前 100 个视频。向下滚动页面时会加载剩余的视频。有没有办法从播放列表中获取所有视频的标题?

from bs4 import BeautifulSoup as bs
import requests

url = "https://www.youtube.com/playlist?list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX"
r = requests.get(url)
soup = bs(r.text,'html.parser')
res = soup.find_all('tr',{'class':'pl-video yt-uix-tile'})
titles = []
for video in res:
    titles.append(video.get('data-title'))

【问题讨论】:

  • 我不知道你的真正目标是什么,但如果只是为了下载完整的播放列表,你知道基于 python 的工具/实用程序youtube-dl 吗?它可以下载单个视频或播放列表。它具有随机下载的选项,因此您不会以数据猪的身份出现在 youtube.. HTH 中。祝你好运。
  • 我想通过在每个视频文件前添加一个数字(播放列表中的序列号)来重命名文件。我已经下载了视频。不管怎样,谢谢你告诉我youtube-dl。我不知道。

标签: python python-3.x web-scraping youtube


【解决方案1】:

如您所见,仅加载了前 100 个视频。当用户向下滚动时,ajax calls 会加载其他视频。

重现 ajax 的最简单但也是最重的选项 调用是使用 selenium webdriver。你可以找官方 python 文档here.

【讨论】:

  • 感谢您推动正确的方向。我尝试使用 selenium webdriver,并成功创建了一个包含播放列表中所有视频标题的列表,即使它包含超过 100 个视频。
【解决方案2】:

我在Abrogans 的输入帮助下创建了以下脚本。

this gist 也很有帮助。

from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Firefox()
url = "https://www.youtube.com/playlist?list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX"
driver.get(url)

elem = driver.find_element_by_tag_name('html')
elem.send_keys(Keys.END)
time.sleep(3)
elem.send_keys(Keys.END)

innerHTML = driver.execute_script("return document.body.innerHTML")

page_soup = bs(innerHTML, 'html.parser')
res = page_soup.find_all('span',{'class':'style-scope ytd-playlist-video-renderer'})

titles = []
for video in res:
    if video.get('title') != None:
        titles.append((video.get('title')))

driver.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2020-09-05
    • 2017-07-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多