【问题标题】:Web Scraping youtube with Python 3使用 Python 3 抓取 youtube
【发布时间】:2018-02-16 11:52:21
【问题描述】:

我正在做一个项目,我需要存储 youtube 中视频的发布日期。
问题是我在尝试在 HTML 源代码中间找到这些数据时遇到了一些困难

这是我的代码尝试:

import requests
from bs4 import BeautifulSoup as BS

url = "https://www.youtube.com/watch?v=XQgXKtPSzUI&t=915s"
response = requests.get(url)
soup = BS(response.content, "html.parser")
response.close()

dia = soup.find_all('span',{'class':'date'})
print(dia)

输出:

[]

我知道我发送给 .find_all() 的参数是错误的。
我这样说是因为我能够使用相同的代码存储视频中的其他信息,例如标题和视图。
我在使用.find_all() 时尝试了不同的参数,但不知道如何找到它。

【问题讨论】:

  • 您尝试过 YouTube API 吗?
  • 我没有。怎么样?我对 python 也很陌生...
  • 没有示例 html;您可能需要深入研究并确保您的 find_all 调用实际上与 html 匹配,这确实是这里唯一的答案,否则我们正在为您编写非常特定于一个场景的代码。

标签: python python-3.x youtube beautifulsoup


【解决方案1】:

如果您将 Python 与 pafy 一起使用,您将获得的对象具有易于访问的发布日期。

安装 pafy: "pip install pafy"

import pafy
vid = pafy.new("www.youtube.com/watch?v=2342342whatever")
published_date = vid.published
print(published_date)   #Python3 print statement

查看 pafy 文档了解更多信息: https://pythonhosted.org/Pafy/ 我留下文档链接的原因是因为它是一个非常简洁的模块,它无需外部请求模块即可处理获取数据,并且还公开了视频的许多其他有用属性,例如最佳格式下载链接等。

【讨论】:

    【解决方案2】:

    YouTube 似乎正在使用 javascript 添加日期,因此源代码中没有信息。您应该尝试使用 Selenium 来抓取,或者从 js 中获取日期,因为它直接在源代码中。

    【讨论】:

      【解决方案3】:

      尝试添加属性如下图:

      dia = soup.find_all('span', attr={'class':'date'})

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-09
        • 2019-03-08
        • 2021-07-24
        • 1970-01-01
        • 2021-07-14
        • 2019-12-30
        • 2017-11-17
        • 2016-02-10
        相关资源
        最近更新 更多