返回
从 Reddit 评论中提取时间戳:使用 BeautifulSoup 的分步指南
python
2024-03-07 14:43:25
从 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 的服务条款可以避免封锁。