我想抓取 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/