返回

从 Reddit 评论中提取时间戳:使用 BeautifulSoup 的分步指南

python

从 Reddit 评论中使用 BeautifulSoup 提取时间戳

问题

对于研究目的,你希望从 Reddit 帖子中抓取评论的时间戳。你认为通过 BeautifulSoup 直接解析 HTML 是最有效的方法,但这遇到了困难。

解决方案

步骤 1:获取 HTML 内容

使用 requests 库获取 Reddit 网页的 HTML 内容:

import requests

url = "https://www.reddit.com/r/NewTubers/comments/1bfhcwz/feedback_friday_post_your_videos_here_if_you_want/"
r = requests.get(url)

步骤 2:创建 BeautifulSoup 对象

使用 BeautifulSoup 库创建 BeautifulSoup 对象,它将 HTML 解析为易于解析的结构:

from bs4 import BeautifulSoup

soup = BeautifulSoup(r.content, 'html.parser')

步骤 3:定位时间戳元素

找出带有特定类名的所有 <a> 元素,该类名与评论时间戳相关联:

timestamps = soup.find_all('a', class_='_3yx4Dn0W3Yunucf5sVJeFU')

步骤 4:提取时间戳文本

遍历找到的时间戳元素,提取其文本内容:

for timestamp in timestamps:
    print(timestamp.text)

保存结果

将提取的时间戳文本保存到文件中或使用它进行进一步处理。

其他提示

  • 要抓取精确到秒的时间戳,请使用 data-time 属性。
  • 确保使用正确的用户代理来避免 Reddit 的封锁。
  • 遵守 Reddit 的服务条款并避免抓取过多数据。

常见问题解答

1. 如何处理缺失的时间戳?

如果某些评论没有时间戳,你可以将其记录在日志文件中或将这些评论排除在抓取之外。

2. 如何处理嵌套的时间戳?

Reddit 评论可以嵌套,这意味着一条评论可能包含另一个评论的时间戳。为了处理这种情况,你可以在递归函数中嵌套 find_all() 方法。

3. 如何抓取精确到秒的时间戳?

使用 data-time 属性,它存储评论的 Unix 时间戳。你可以将其转换为可读的时间格式。

4. 如何处理已编辑的时间戳?

Reddit 允许用户编辑他们的评论,这可能会更新时间戳。为了确保准确性,你应该检查 data-edited 属性,它表示评论是否已编辑。

5. 如何避免 Reddit 的封锁?

使用用户代理、遵守频率限制并遵循 Reddit 的服务条款可以避免封锁。