我在Python中使用Selenium从Youtube频道的网站上抓取视频。下面是一组代码。videos = driver.find_elements(By.CLASS_NAME, 'style-scope ytd-grid-video-renderer')
行反复返回没有视频链接(也就是print(videos)
在输出一个空列表后)。你如何修改它以找到加载页面上的所有视频?
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('https://www.youtube.com/wendoverproductions/videos')
videos = driver.find_elements(By.CLASS_NAME, 'style-scope ytd-grid-video-renderer')
print(videos)
urls = []
titles = []
dates = []
for video in videos:
video_url = video.find_element(by=By.XPATH, value='.//*[@id="video-title"]').get_attribute('href')
urls.append(video_url)
video_title = video.find_element(by=By.XPATH, value='.//*[@id="video-title"]').text
titles.append(video_title)
video_date = video.find_element(by=By.XPATH, value='.//*[@id="metadata-line"]/span[2]').text
dates.append(video_date)
2条答案
按热度按时间xqkwcwgp1#
如果您没有YouTube Data API v3开发者密钥:
以下过程要求您拥有Google帐户。
转到:https://console.cloud.google.com/projectcreate
单击
CREATE
按钮。转到:https://console.cloud.google.com/marketplace/product/google/youtube.googleapis.com
单击
ENABLE
按钮。单击
CREATE CREDENTIALS
按钮。选择
Public data
选项。单击
NEXT
按钮。注意显示的
API Key
并继续阅读。如果您拥有YouTube Data API v3开发者密钥:
要获取给定YouTube频道ID的视频(如果您不知道如何获取给定YouTube频道的频道ID,请参阅this answer),将其第二个字符(
C
)替换为U
以获取其上传播放列表ID,并将其作为playlistId
提供给YouTube Data API v3PlaylistItems: list端点。这是一个Python示例代码,列出了给定频道ID的视频(不要忘记用YouTube Data API v3开发者密钥替换
API_KEY
):有关分页的文档,请参见this webpage。
8wigbo562#
使用Selenium实现:
首先,我想解决的问题意味着想要拉数据与
YouTube API
的帮助下,我即将达到的目标,但对于一些API的限制,如API KEY的请求限制和其他一些复杂性,我无法抓取完整的数据,这就是为什么我去与超级强大的 selenium 引擎作为我的最后手段,它的工作就像一个魅力.完整的工作代码示例:
输出: