我的代码的以下部分可以工作,但是这里的问题是,它只能在页面的可见部分获取视频的名称。我想做的就是向下滚动页面。有没有一种方法可以使用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
答案 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)