使用snscrape抓取Twitter后,如何将结果输出至文件?
snscrape抓取Twitter内容:写入文件失败+警告问题解决
一、无法写入文件的问题
你的代码存在两个关键问题:一是写入文件的逻辑放在了循环外部,循环里每次都会覆盖tweets变量,最终只会写入最后一条抓取到的内容(如果循环没执行,tweets变量甚至不存在);二是设置了maxTweets=10但没生效,根本没限制抓取数量。
修复方案1:逐条写入文件
把写入逻辑放到循环内部,每抓到一条就写入一条:
import snscrape.modules.twitter as twitter maxTweets = 10 keyword='salvation' # 循环外打开文件,避免重复IO操作 with open('file.txt', 'w', encoding="utf-8") as f: for i, tweet in enumerate(twitter.TwitterSearchScraper(f'{keyword} since:2021-11-01 until:2023-01-01 lang:"en"').get_items()): if i >= maxTweets: break # 达到设定的最大抓取量就停止 tweet_data = {"tweet.url": tweet.url} print(tweet_data) print(tweet_data, file=f)
修复方案2:先收集所有内容再一次性写入
适合需要对抓取内容做后续处理的场景:
import snscrape.modules.twitter as twitter maxTweets = 10 keyword='salvation' all_tweets = [] for i, tweet in enumerate(twitter.TwitterSearchScraper(f'{keyword} since:2021-11-01 until:2023-01-01 lang:"en"').get_items()): if i >= maxTweets: break tweet_data = {"tweet.url": tweet.url} all_tweets.append(tweet_data) print(tweet_data) # 统一写入文件 with open('file.txt', 'w', encoding="utf-8") as f: for item in all_tweets: print(item, file=f)
二、关于警告信息
你收到的future warning username is deprecated, use user.username instead翻译为:未来警告:username属性已废弃,请改用user.username。
这个警告是snscrape库内部的属性更新导致的,你的代码里并没有用到username相关属性,所以可以直接忽略;如果后续代码需要获取用户用户名,记得用tweet.user.username代替旧的tweet.username写法即可。
内容的提问来源于stack exchange,提问作者Parakeet
相关产品推荐
相关产品推荐

