无法使用 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"))
我是 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
或类似
首先,您不能请求将被阻止。其次 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"))