【问题标题】:How to Scroll Down Youtube Channel on Chrome with Selenium in Python如何在 Python 中使用 Selenium 在 Chrome 上向下滚动 Youtube 频道
【发布时间】: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 个视频。我已经成功手动滚动,所以我知道元素查找部分有效。我尝试过thisthis,但它们只能给我 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


【解决方案1】:

您可以使用 JavaScript 在 selenium 中向下滚动。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    取自selenium docs.

如果您只想下载频道制作的所有视频,youtube-dl 是更好的选择。

您所要做的就是从控制台运行 youtube-dl 并为您要下载的频道添加频道 ID。

$ youtube-dl "[INSERT CHANNEL-ID]"

它也适用于播放列表和单个视频,甚至支持其他网站。

【讨论】:

  • 我已经尝试过 JavaScript,但由于某种原因它不能滚动,它只有在我添加 driver.find_element_by_tag_name('body').send_keys(Keys.END) 后才能在一定程度上起作用。我将使用 youtube-dl。谢谢。
【解决方案2】:

这个问题可能是因为加载了 60 个视频后,页面需要加载更多视频,因此无法返回完整的视频。频道的视频。

你可以做一件事,在加载了60个视频之后,你可以再次搜索视频链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多