You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用BeautifulSoup获取YouTube视频的datetime格式发布时间?

搞定YouTube发布时间转datetime格式的问题

嘿,我来帮你解决这个爬虫里的时间转换问题!你现在拿到的是YouTube界面显示的带前缀的文本,我们有两种靠谱的方式把它转成标准的YYYY-MM-DD HH:MM:SS格式,甚至能拿到更精确的时间哦。

优先推荐:直接抓页面里的标准时间属性

其实YouTube的watch-time-text元素里面藏着一个<time>标签,它的datetime属性已经是ISO标准的时间格式(比如2020-02-08T14:30:00Z),直接取这个属性比解析文本靠谱多了,完全不用担心界面显示格式变了导致解析失败。

修改你的代码试试这个:

from datetime import datetime

# 先找到watch-time-text元素,再定位里面的time标签
time_tag = video_soup.find("strong", class_="watch-time-text").find("time")
if time_tag and "datetime" in time_tag.attrs:
    # 拿到ISO格式的时间字符串,处理下时区兼容问题
    iso_time = time_tag["datetime"].replace("Z", "+00:00")
    # 转成datetime对象
    publish_dt = datetime.fromisoformat(iso_time)
    # 转成你要的YYYY-MM-DD HH:MM:SS格式字符串
    video_obj["date_published"] = publish_dt.strftime("%Y-%m-%d %H:%M:%S")
else:
    # 如果找不到time标签,就用文本解析当备用方案
    raw_text = video_soup.find("strong", class_="watch-time-text").text
    # 把"Published on "前缀去掉,拿到纯日期字符串
    clean_date_str = raw_text.replace("Published on ", "").strip()
    # 解析成datetime对象(这里只有日期,时间默认是00:00:00)
    publish_dt = datetime.strptime(clean_date_str, "%b %d, %Y")
    video_obj["date_published"] = publish_dt.strftime("%Y-%m-%d %H:%M:%S")

return video_obj["date_published"]

备用方案:仅解析界面显示的文本

要是哪天页面结构变了,找不到<time>标签,就用文本解析的方式救急:

  1. 先把文本里的"Published on "前缀删掉,得到像Feb 8, 2020这样的纯日期字符串
  2. 用datetime.strptime()按照对应的格式解析:%b对应月份缩写(比如Feb),%d对应日期,%Y对应4位年份
  3. 解析后用strftime()转成你要的格式,因为原文本没显示时间,所以时间部分会是00:00:00

代码示例:

from datetime import datetime

raw_time_text = video_soup.find("strong", class_="watch-time-text").text
# 清理文本,提取核心日期部分
clean_date = raw_time_text.replace("Published on ", "").strip()
# 解析为datetime对象
publish_datetime = datetime.strptime(clean_date, "%b %d, %Y")
# 转换为目标格式的字符串
video_obj["date_published"] = publish_datetime.strftime("%Y-%m-%d %H:%M:%S")

return video_obj["date_published"]

小提醒

不同地区的YouTube界面可能显示不同的日期格式(比如有的地方是8 Feb 2020),这时候抓<time>标签的属性就稳多了,不受语言和地区影响。要是你需要的是datetime对象而不是字符串,直接返回publish_dt就行,不用调用strftime()。

内容的提问来源于stack exchange,提问作者Proteeti Prova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:18:10