使用Tweepy提取一周Twitter数据并保存至CSV的报错解决
解决Tweepy批量提取一周Twitter数据并保存为CSV的问题
嘿,我来帮你搞定这个问题!你遇到的TypeError: 'Status' object is not iterable是因为代码里把单个的Tweet对象当成了可迭代的列表来处理,咱们一步步来修正:
错误原因分析
你写的tweets_to_data_frame1函数里,for tweets in tweepy.Cursor(...).items()这一行拿到的tweets其实是单个的Status对象(也就是单条推文),但你后面又写了for tweet in tweets,试图迭代这个单个对象,这就导致了报错——单个推文对象是不能被迭代的。
修正后的完整代码
咱们换个思路:先批量收集一周内的所有推文,再统一转换成DataFrame,这样既高效又不容易出错。
import tweepy import pandas as pd import numpy as np # 先确保你已经完成了Tweepy的API认证,比如: # auth = tweepy.OAuthHandler(consumer_key, consumer_secret) # auth.set_access_token(access_token, access_token_secret) # api = tweepy.API(auth) def tweets_to_data_frame(public_tweets): # 用列表收集每条推文的信息,比逐个生成数组更直观 tweet_records = [] for tweet in public_tweets: record = { 'Tweets': tweet.text, 'len': len(tweet.text), 'date': tweet.created_at, 'retweets': tweet.retweet_count, 'lang': tweet.lang } tweet_records.append(record) # 把列表转换成DataFrame return pd.DataFrame(tweet_records) # 设置查询关键词和时间范围 search_query = 'donald trump' start_date = "2019-04-04" end_date = "2019-04-07" # 使用Cursor批量获取数据,count=100是单次请求的最大条数(符合Twitter API限制) week_tweets = tweepy.Cursor(api.search, q=search_query, count=100, since=start_date, until=end_date).items() # 转换为DataFrame并保存到CSV df_week = tweets_to_data_frame(week_tweets) df_week.to_csv('donaldtrump_week.csv', index=False) # index=False避免生成多余的索引列 # 查看前15条数据 print(df_week.head(15))
关键修正点
- 调整数据收集逻辑:不再试图迭代单个推文对象,而是遍历Cursor返回的所有推文,逐个提取信息存入列表
- 简化DataFrame构建:用字典列表的方式收集数据,比原来的numpy数组方式更简洁,也更易维护
- 优化CSV保存:添加
index=False参数,避免CSV里出现不必要的索引列
额外注意事项
- Twitter标准API的搜索功能只能获取最近7天的公开推文,而且有速率限制,如果需要更早的数据可能需要使用高级API
- 运行前确保你的API密钥和认证配置正确,避免因权限不足导致请求失败
- 如果要提取大量数据,建议加入
time.sleep()来控制请求频率,防止触发API限制
内容的提问来源于stack exchange,提问作者aiman khalid
相关产品推荐
相关产品推荐

