python - 如何抓取 youtube 视频以获取比一页更多的视频?

标签 python beautifulsoup youtube

我想抓取 youtube 以根据我的搜索查询收集有关视频的描述。我正在使用 BeautifulSoup4 这样做。我已成功找到视频 URL。
我面临的问题是我想为每个类别收集至少 2000 个视频链接。但根据一项要求,YouTube 只显示 20 个视频。如何收集更多视频的网址?

from bs4 import BeautifulSoup as bs
import requests

BASE_URL = "https://www.youtube.com"
BASE_SEARCH_URL = "https://www.youtube.com/results?search_query="

query = "travel+blogs"

r = requests.get(BASE_SEARCH_URL + query)
page = r.text
soup = bs(page, 'html.parser')
vids = soup.findAll('a', attrs={'class': 'yt-uix-tile-link yt-ui-ellipsis yt-ui-ellipsis-2 yt-uix-sessionlink spf-link '})

video_urls = [BASE_URL + vid['href'] for vid in vids]

print(video_urls)

我面临的问题是我想为每个类别收集至少 2000 个视频链接。但根据一项要求,YouTube 只显示 20 个视频。如何收集更多视频的网址?

最佳答案

尝试使用 Selenium 与 BeautifulSoup 一起。
Selenium 允许您通过导入滚动到页面底部:

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

并使用 driver.find_element_by_tag_name('html').send_keys(Keys.END)滚动到底部(driver 是 Selenium Webdriver 对象)

对于您的用例,您可以循环滚动到底部大约 100 次,每次填充 20 个结果,并且您可以在使用 driver.page_source 获取原始 HTML 后使用上面的抓取代码

不过,我建议您使用 YouTube 数据 API。它很容易上手并且是免费的。它会运行得更快、更有效。
https://developers.google.com/youtube/v3/

关于python - 如何抓取 youtube 视频以获取比一页更多的视频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55851197/

相关文章:

python - 散列是什么意思

python - 从选定的 child 返回父标签属性

python - 网页抓取(足球赔率)

android - 如何在 Android 应用程序中打开 Youtube 视频链接?

youtube - 通过 API 获得喜欢的 YouTube 视频

python - Pandas 在 groupby 内插值

python - 如何在图表中标记特定类型(例如 030T)的所有三元组?

python - 是否有一些好的 Twisted 备忘单或引用卡?

python - HTTP 错误 999 : Request denied

php - YouTube API v3获取视频-PHP