如何用Python高效抓取Reddit评论时间戳(含JSON解析与时间处理)

心靈之曲

心靈之曲

2026-04-26

604人浏览

原创

如何用Python高效抓取Reddit评论时间戳(含JSON解析与时间处理)

Reddit页面的评论时间戳无法通过常规BeautifulSoup解析获取,因其由JavaScript动态加载;正确方法是请求Reddit的JSON API接口,解析嵌套的created_utc字段并转换为可读时间。

reddit页面的评论时间戳无法通过常规beautifulsoup解析获取,因其由javascript动态加载;正确方法是请求reddit的json api接口,解析嵌套的`created_utc`字段并转换为可读时间。

Reddit 的前端页面(如 https://www.reddit.com/r/...)采用大量 JavaScript 渲染内容,尤其是评论区——这意味着你通过 requests.get() 获取的 HTML 源码不包含实际评论数据,仅含占位符或初始骨架。这也是为什么使用 BeautifulSoup 查找类名 _3yx4Dn0W3Yunucf5sVJeFU(该类名本身也是动态生成、每次部署可能变更)时始终返回空列表:目标元素根本未存在于原始 HTML 中。

✅ 正确路径:直接调用 Reddit 官方支持的 JSON API
Reddit 为每个帖子提供对应的 .json 接口,只需在原 URL 末尾添加 .json 即可(例如:https://www.reddit.com/r/NewTubers/comments/1bfhcwz/.../.json)。该接口返回结构化 JSON 数据,其中:

  • html_json[0] 对应主帖(post)元信息;
  • html_json[1] 对应完整评论树(包括所有一级评论及其子评论);
  • 每条评论数据位于 html_json[1]['data']['children'][i]['data'] 中;
  • 关键时间字段为 'created_utc'(Unix 时间戳,单位:秒)。

以下是生产就绪的完整示例代码(含错误处理、时间排序与 CSV 输出):

php版微信js-sdk支付接口类
php版微信js-sdk支付接口类

php版微信js-sdk支付接口类

下载
import json
import csv
import datetime
from urllib.parse import urljoin
import requests

# 替换为你的目标帖子URL(注意末尾不带.json)
post_url = "https://www.reddit.com/r/NewTubers/comments/1bfhcwz/feedback_friday_post_your_videos_here_if_you_want/"

# 构造JSON API地址(自动补全 .json)
json_url = urljoin(post_url.rstrip('/'), '.json')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

try:
    response = requests.get(json_url, headers=headers, timeout=15)
    response.raise_for_status()
    data = response.json()
except requests.exceptions.RequestException as e:
    raise SystemExit(f"❌ 请求失败: {e}")
except json.JSONDecodeError:
    raise SystemExit("❌ JSON 解析失败:响应非有效JSON格式(可能被限流或需登录)")

# 提取评论部分(索引1)
if len(data) <p>? <strong>关键注意事项</strong>:</p>
  • 必须设置 User-Agent:Reddit 会拒绝无头请求(403 Forbidden),模拟真实浏览器是基本要求;
  • .json 接口默认只返回前几层评论(约数百条):若需全部评论(含深层嵌套),需递归请求 more 对象或使用 limit 参数(如 ?limit=1000),或改用 PRAW 库;
  • created_utc 是 UTC 时间戳:datetime.fromtimestamp() 默认转为本地时区,建议显式使用 tz=datetime.timezone.utc 并调用 .isoformat() 保证时区明确;
  • 不要依赖 HTML 类名:Reddit 频繁更新前端,CSS 类名(如 _3yx4Dn0W3Yunucf5sVJeFU)属内部哈希值,无稳定性保障;
  • 反爬与合规性:单次请求间隔 ≥ 2 秒,避免高频调用;遵守 robots.txt(https://www.reddit.com/robots.txt),研究用途建议优先查阅 Reddit API 文档 及申请正式 OAuth 凭据。

? 进阶提示:若需毫秒级精确时间(如悬停显示的“X seconds ago”),created_utc 已足够——其精度为秒,结合服务器响应时间可估算;而完整评论树(含所有子回复)需解析 replies 字段并递归遍历,这超出了基础 JSON 接口能力,此时推荐使用官方 SDK PRAW 或 Selenium + WebDriverWait 动态渲染方案。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1104

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

2048

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1184

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

8613

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1454

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1505

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

860

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

530

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1087

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PyCharm官方快速入门指南
PyCharm官方快速入门指南

共0课时 | 0人学习

Python函数定义官方教程
Python函数定义官方教程

共0课时 | 0人学习

Python 3.14.6官方文档
Python 3.14.6官方文档

共0课时 | 0人学习