如何将PSAW采集的WallStreetBets带cash tag的帖子数据导出为Excel
WSB帖子数据导出Excel可落地实现
你照着社区pandas导出教程始终跑不通的核心原因是:原代码仅在循环中逐条将内容打印到控制台,根本没有将筛选后的字段统一存入可对接pandas的结构化数据集,没有可导出的数据源,自然走不通导出流程。按照以下步骤修改即可一次性跑通:
第一步:清理冗余依赖
原代码中导入的pandas_datareader在全流程中没有被实际调用,保留反而可能引发不必要的依赖版本冲突,直接删除对应导入行即可。
第二步:初始化结构化存储容器
在启动循环遍历帖子之前,初始化空列表用于存储每一条符合筛选条件的帖子字段,避免循环拉取过程中数据丢失。
第三步:替换原有控制台打印逻辑
原循环中判断帖子包含cash tag时的打印代码,替换为将所有需要的字段按固定结构存入列表,过程中做两处格式优化,避免Excel导出后可读性差:
- 将Unix时间戳转换为可读的标准时间格式,避免导出后Excel单元格显示一串无意义的数字时间戳
- 将匹配到的cash tag列表拼接为逗号分隔的字符串,避免导出后单元格保留Python列表的方括号格式
第四步:完成Excel导出
提前安装pandas导出xlsx格式需要的依赖引擎openpyxl(直接执行pip install openpyxl即可),将存储数据的列表转换为pandas DataFrame后,直接调用to_excel方法落地文件,指定index=False参数避免将pandas自带的行索引作为多余列导入Excel。
整合后可直接运行的完整代码
from psaw import PushshiftAPI import datetime import pandas as pd # 初始化PSAW采集接口 api = PushshiftAPI() # 设置采集起始时间为2021-03-16 start_time = int(datetime.datetime(2021,3,16).timestamp()) # 初始化空列表存储所有符合筛选条件的结构化数据 record_list = [] # 拉取指定时间节点后的wallstreetbets板块帖子 submissions = api.search_submissions( after=start_time, subreddit='wallstreetbets', filter=['url','author','title','subreddit'] ) # 遍历帖子做cash tag筛选 for submission in submissions: words = submission.title.split() cashtags = list(set(filter(lambda word: word.lower().startswith('$'), words))) # 仅保留标题中包含cash tag的帖子 if len(cashtags) > 0: # 转换时间戳为可读格式 publish_time = datetime.datetime.fromtimestamp(submission.created_utc).strftime("%Y-%m-%d %H:%M:%S") # 将单条结构化数据追加到列表 record_list.append({ "发布时间": publish_time, "作者": submission.author, "帖子标题": submission.title, "帖子链接": submission.url, "匹配到的Cash Tag": ", ".join(cashtags) }) # 数据准备完成后执行导出 if len(record_list) > 0: df = pd.DataFrame(record_list) df.to_excel("wsb_cashtag_posts.xlsx", index=False, engine="openpyxl") print(f"导出完成,共采集到{len(record_list)}条符合要求的帖子数据") else: print("未筛选到符合条件的帖子数据")
常见踩坑排查
- 导出时出现
ModuleNotFoundError: No module named 'openpyxl':缺少xlsx格式导出依赖,执行pip安装对应包即可 - 导出的cash tag列格式异常:检查是否将原始列表格式的cashtags直接存入了字典,未做字符串拼接
- 导出的时间列显示为一串数字:检查是否未对
created_utc时间戳做格式化转换 - 采集过程中程序中断导致数据丢失:已存入
record_list的内容会一直保留在内存中,中断后可随时手动调用列表转DataFrame、导出Excel的代码,不会丢失已经拉取到的内容
内容的提问来源于stack exchange,提问作者hideonbush
相关产品推荐
相关产品推荐

