【问题标题】:Can't get youtube video urls using BeautifulSoup无法使用 BeautifulSoup 获取 youtube 视频网址
【发布时间】:2021-05-09 11:03:51
【问题描述】:

我是 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

【问题讨论】:

  • 您是否尝试在请求的标头中使用 User-Agent?
  • 你看过page里面的数据了吗?如果您尝试使用正则表达式运行一个简单的 href 查找器,您会发现返回的页面中没有视频的 href,那是因为 youtube 之后使用 javascript 加载数据,但您无法通过 requests 模块获得该数据 - 您需要像 selenium 这样的东西来运行一个完整的浏览器来加载结果

标签: python web-scraping beautifulsoup youtube


【解决方案1】:

您将无法使用美丽的汤找到任何东西,因为它是一个 javascript 呈现的网站,请尝试将 selenium 与 chrome Web 驱动程序或任何其他方法一起使用,这会创建一个浏览器实例,您尝试使用的视频标签选择使用当使用 selenium 执行所有 js 代码时,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"))

【讨论】:

    【解决方案2】:

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

    在抓取 js 重页时考虑使用 selenium 之类的东西。

    【讨论】:

    • 是的,实际上几个月前我已经搞砸了 Selenium,我对此更满意。但我必须进行近 100 次搜索。所以我认为bs4会更快
    【解决方案3】:

    尝试改用 webbrowser 模块。它是一个内置模块,工作正常......

    代码如下:

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

    效果很好。

    【讨论】:

    • 你能列举一下如何从webbrowser获取我想要的链接吗??
    猜你喜欢
    • 2023-04-03
    • 2015-11-23
    • 2019-01-28
    • 1970-01-01
    • 2020-12-03
    • 2017-10-09
    • 1970-01-01
    • 2013-03-08
    • 2020-09-15
    相关资源
    最近更新 更多