使用Python+Tweepy抓取指定话题标签Twitter推文 存JSON时报AttributeError如何解决
报错核心原因
触发AttributeError: 'str' object has no attribute '_json'的问题来源有两处:
- 构建
all_tweets列表时,提前拆解了Tweepy的原生Tweet对象:你写的列表推导式all_tweets=[tweet.text for tweet in tweets],直接把每个tweet实例的.text属性(也就是字符串类型的推文纯文本)存进了列表,后续遍历该列表时,元素已经是纯字符串,不再是带_json属性的Tweet实体,自然无法调用对应方法。 - 文件保存逻辑存在缺陷:原代码在
for循环内逐次以覆盖模式打开同一个文件做写入,就算Tweet对象属性正确,最终也只会留存最后一条推文的内容。
修正操作步骤
- 调整列表存储逻辑,保留完整Tweet实体
不要提前把推文转成纯文本,需要获取完整JSON结构时,要保留Tweepy返回的原生Tweet对象:
# 替换原有all_tweets的构建代码 tweets = tw.Cursor(api.search, q=query, lang='en').items(50) all_tweets = [tweet for tweet in tweets] # 后续如果需要单独提取推文文本,直接访问对象的text属性即可,例如all_tweets[0].text
- 同时删除冗余的无效导入:原代码中的
import tweepy as OAuthHandler没有实际作用,直接移除即可。
- 调整JSON文件保存逻辑
不要在循环内逐次写文件,先把所有推文的JSON字段整理成统一列表,一次性写入文件,避免反复覆盖:
import json # 批量提取所有推文的完整JSON结构 tweets_full_json = [tweet._json for tweet in all_tweets] # 一次性写入文件,增加ensure_ascii=False参数避免emoji、特殊字符被转义为乱码 with open('tweetsfile.json', 'w', encoding='utf8') as file: json.dump( tweets_full_json, file, sort_keys=True, indent=4, ensure_ascii=False )
- 顺便修正原代码中不规范的文件命名:原代码里写的
tweetsfile._json、tweet.text_json属于后缀错误,调整为统一的.json格式即可。
内容的提问来源于stack exchange,提问作者Ahd Abu Alrob
相关产品推荐
相关产品推荐

