如何使用请求向下滚动YouTube视频

时间:2019-08-05 11:50:02

标签: python beautifulsoup python-requests

我的代码的以下部分可以工作,但是这里的问题是,它只能在页面的可见部分获取视频的名称。我想做的就是向下滚动页面。有没有一种方法可以使用python中的请求模块向下滚动?

    def __init__(self):
    word = input("Search: ")
    self.r = requests.get('https://www.youtube.com/results?search_query={}'.format(word))
    self.soup = BeautifulSoup(self.r.content,"html.parser")

def find_video(self):
    videos = self.soup.find('div',attrs={"id":"content"}).find_all("div",attrs={"class":"yt-lockup-content"})
    for video in videos:
        user_detector = video.a.get("href")
        if user_detector.startswith("/watch"):
            print(video.a.text)
            print("------------------------------------")
        else:
            pass

2 个答案:

答案 0 :(得分:1)

请求不解释JavaScript。如果您想要具有与使用浏览器相同的行为,则必须使用Selenium。页面上的内容是通过ajax动态加载的。因此,要求对此不是很好。

答案 1 :(得分:0)

由于您未使用官方API,因此不能仅通过使用request / BeautifulSoup进行抓取来做到这一点。您需要执行Javascript才能实现这一点。

我的建议是使用直接与浏览器交互并能够执行JS的网络驱动程序。

from selenium import webdriver
import time
bot = webdriver.Firefox()
url = 'https://www.youtube.com/results?search_query={}'.format(word)
bot.get(url)
#waiting for the page to load
time.sleep(3) 
#repeat scrolling 10 times
for i in range(10):
    #scroll 300 px
    bot.execute_script('window.scrollTo(0,(window.pageYOffset+300))')
    #waiting for the page to load
    time.sleep(3)