使用Tweepy爬取推文时遇AttributeError: 'str' object has no attribute 'user'错误求助
解决Tweepy中
AttributeError: 'str' object has no attribute 'user'错误 问题描述
使用Tweepy库获取推文时触发如下错误:
AttributeError: 'str' object has no attribute 'user'
数月前运行相同代码未出现该问题,当前代码及报错详情如下:
出错代码
def tweets_mining(csv_file, search_query, num_tweets): with open(csv_file, 'w', encoding='utf8', newline='') as file: thewriter = writer(file) header = ['tweet_id', 'time_created', 'tweet', 'location', 'retweets', 'likes'] thewriter.writerow(header) for tweet in tweepy.Cursor(api.search_tweets, q=search_query, tweet_mode="extended", result_type="recent", lang="en").items(num_tweets): tweet_id = tweet.id time_created = tweet.created_at tweet = tweet.full_text location = tweet.user.location retweets = tweet.retweet_count likes = tweet.favorite_count row = [tweet_id, time_created, tweet, location, retweets, likes] thewriter.writerow(row) search_term = "first search" search_query = search_term + " -filter:links AND -filter:retweets AND -filter:replies" tweets_mining('first_search.csv', search_query, 10)
报错详情
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_7884/2036184101.py in <module> 3 search_query = search_term + " -filter:links AND -filter:retweets AND -filter:replies" 4 ----> 5 tweets_mining('first_search.csv', search_query, 10) ~\AppData\Local\Temp/ipykernel_7884/1256763917.py in tweets_mining(csv_file, search_query, num_tweets) 13 time_created = tweet.created_at 14 tweet = tweet.full_text ---> 15 location = tweet.user.location 16 retweets = tweet.retweet_count 17 likes = tweet.favorite_count AttributeError: 'str' object has no attribute 'user'
问题原因
第14行代码tweet = tweet.full_text将循环中原本的Tweepy推文对象覆盖成了字符串类型的推文内容。后续代码尝试调用tweet.user.location时,字符串对象没有user属性,因此触发报错。
修复代码
修改变量名避免覆盖原推文对象,将存储推文文本的变量改为tweet_text:
def tweets_mining(csv_file, search_query, num_tweets): with open(csv_file, 'w', encoding='utf8', newline='') as file: thewriter = writer(file) header = ['tweet_id', 'time_created', 'tweet', 'location', 'retweets', 'likes'] thewriter.writerow(header) for tweet in tweepy.Cursor(api.search_tweets, q=search_query, tweet_mode="extended", result_type="recent", lang="en").items(num_tweets): tweet_id = tweet.id time_created = tweet.created_at # 改用新变量存储推文文本,避免覆盖原对象 tweet_text = tweet.full_text location = tweet.user.location retweets = tweet.retweet_count likes = tweet.favorite_count row = [tweet_id, time_created, tweet_text, location, retweets, likes] thewriter.writerow(row) search_term = "first search" search_query = search_term + " -filter:links AND -filter:retweets AND -filter:replies" tweets_mining('first_search.csv', search_query, 10)
说明
修改后,原tweet变量仍保留Tweepy推文对象的引用,后续调用tweet.user、tweet.retweet_count等属性时即可正常获取数据。之前代码未报错可能是当时未执行到覆盖变量后的属性调用逻辑,或代码存在细微差异。
内容的提问来源于stack exchange,提问作者Babatunde Akeredolu
相关产品推荐
相关产品推荐

