【发布时间】:2020-12-14 18:11:36
【问题描述】:
我正在尝试向下滚动 YouTube 频道的“视频”标签,以便获取指向该频道中所有视频的链接。我在 Python 3 中使用 Selenium 模块,使用 Google Chrome 作为浏览器。这是我的类中执行此部分的方法(在我调用 self.driver.get(CHANNEL_URL) 后立即调用)
def get_video_links(self):
xpath = '/html/body/ytd-app/div/ytd-page-manager/ytd-browse/ytd-two-column-browse-results-renderer/div[1]/ytd-section-list-renderer/div[2]/ytd-item-section-renderer/div[3]/ytd-grid-renderer/div[1]/ytd-grid-video-renderer/div[1]/div[1]/div[1]/h3/a'
elements = self.driver.find_elements_by_xpath(xpath)
last_result = 0
curr_result = len(elements)
while curr_result != last_result:
self.driver.find_element_by_tag_name('body').send_keys(Keys.END)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
elements = self.driver.find_elements_by_xpath(xpath)
last_result = curr_result
curr_result = len(elements)
video_links = [elem.get_attribute('href') for elem in elements]
return video_links
这当前返回 60 个 url,而不滚动则返回 30 个 url。然而,我正在抓取的频道有大约 150 个视频。我已经成功手动滚动,所以我知道元素查找部分有效。我尝试过this 和this,但它们只能给我 30 个网址,而且我没有看到浏览器上发生任何滚动。
【问题讨论】:
-
youtube-dl实用程序可以获取频道、列表或单个视频的标识符(可能是其他视频,user_id?),并下载整个集合。不确定这是否符合您的用例。祝你好运。 -
谢谢,大概,我去看看!
-
好!
youtube-dl拥有非常活跃的开发组/社区和支持。抱歉,手边没有网址,但值得搜索。youtube-dl也是 S.O. 上的知名实体,但对于好的介绍材料和高级问题,最好查看外部站点。祝你好运。 -
youtube-dl 工作,谢谢!
-
不要尝试将社交媒体自动化。如果您想使用滚动页面,请尝试此链接中的此选项guru99.com/scroll-up-down-selenium-webdriver.html
标签: python selenium web-scraping youtube