无法使用 BeautifulSoup 获取 YouTube 视频网址

Can't get youtube video urls using BeautifulSoup

我是 python 和网络抓取的菜鸟。 我正在尝试获取作为搜索结果出现的视频 URL 列表。我试过这个:-

import requests
from bs4 import BeautifulSoup as bs

search_term = "python"
page = requests.get("https://www.youtube.com/results?search_query=" + search_term)

soup = bs(page.content, 'html.parser')

vids = soup.findAll('a',attrs={'id':'thumbnail'})

url_list = []
for v in vids:
    tmp = 'https://www.youtube.com' + v['href']
    url_list.append(tmp)
print(url_list)
print(vids)

但输出只是

[]
[]

我做错了什么? 如果我这样做 print(soup),它会打印出整个网页。 我希望 url_list 数组填充 https://www.youtube.com/watch?v=abcdefgh123 或类似

的 URL

首先,您不能请求将被阻止。其次 youtube 使用 js 呈现他们的页面,所以你将无法使用 bs4 找到元素。

在抓取 js 繁重的页面时考虑像 selenium 这样的东西。

尝试改用网络浏览器模块。它是一个内置模块并且工作正常...

代码如下:

import webbrowser
user_input = "your input"
webbrowser.open(f"https://www.youtube.com/results?search_query={user_input}")

它工作正常。

你将无法使用漂亮的汤找到任何东西,因为它是一个 javascript 呈现的网站,请尝试将 selenium 与 chrome 网络驱动程序或任何其他创建浏览器实例的工具一起使用,当使用 selenium 执行所有 js 代码时,您尝试 select 使用 bs4 的视频标签将可见。

你可以试试这个:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options=Options()
options.add_argument("start-maximized")
#path to chrome driver
driver = webdriver.Chrome(options=options, executable_path='chromedriver.exe')
url='link to video listings'
driver.get(url)
listings=driver.find_elements_by_xpath("your xpath expression")
for l in listings:
     print(l.get_attribute("href"))