You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写嵌套循环爬取多用户推文时如何避免数据覆盖

我遇到了难以解决的问题

大家好:
我正在尝试获取多个用户的近期推文,为此编写了嵌套循环,但目前遇到了变量berlintweet被覆盖的问题。循环本身可以正常运行,但我需要实现数据追加存储,而非每次循环都覆盖原有数据。
我是纯编程新手,好不容易把代码写到当前进度,现在却卡在这个问题上,完全不知道该如何调整修改,任何帮助或建议我都不胜感激。
提前感谢大家的帮助!

原代码如下:

import tweepy
import config
import pandas as pd

client = tweepy.Client(bearer_token=config.BEARER_TOKEN)
Liste_Namen = pd.read_csv('Namen.csv', delimiter=',')
tweet_id_list = [""]
tweet_text_list = [""]
tweet_created_list = [""]
berlintweet = [""]

for user_name in Liste_Namen['ids']:
    berlintweet = tweepy.Paginator(client.get_users_tweets, id=user_name, exclude= ["replies", "retweets"], tweet_fields=["created_at"], max_results=100).flatten(limit=200)

    for tweet in berlintweet:
        tweet_id_list.append(tweet.id)
        tweet_text_list.append(tweet)
        tweet_created_list.append(tweet.created_at)

df = pd.DataFrame({
'name': config.USER_ID,
'tweet_id': tweet_id_list,
'tweet_text': tweet_text_list,
'tweet_created': tweet_created_list,

})
df.to_csv('BerlinTest2.csv', sep=',', index=False, encoding='utf-8-sig')

解答

首先纠正一个误解:berlintweet被覆盖根本不是问题。这个变量是循环内的临时变量,只用来暂存当前用户的分页推文结果,内层循环已经把当前批次的推文数据追加到全局列表后,外层循环给它赋下一个用户的推文结果是完全正常的逻辑,不会弄丢之前已经存入列表的数据。

你的代码实际有3个会导致结果错误/运行报错的问题:

  • 初始化存储列表时提前放入了空字符串,导出的CSV第一行会是无效脏数据
  • 构造DataFrame时name字段直接传入固定值config.USER_ID,和其他列的长度不匹配会直接报错,也无法对应每条推文所属的用户
  • 存储推文内容时直接传入了tweet对象,没有取.text属性,导出的CSV里不会显示实际推文内容,只会显示对象的内存标识

修正后的可运行代码如下:

import tweepy
import config
import pandas as pd

client = tweepy.Client(bearer_token=config.BEARER_TOKEN)
Liste_Namen = pd.read_csv('Namen.csv', delimiter=',')
# 初始化为空列表,不提前存入无效值
tweet_id_list = []
tweet_text_list = []
tweet_created_list = []
user_name_list = []

for user_name in Liste_Namen['ids']:
    berlintweet = tweepy.Paginator(
        client.get_users_tweets,
        id=user_name,
        exclude=["replies", "retweets"],
        tweet_fields=["created_at"],
        max_results=100
    ).flatten(limit=200)

    for tweet in berlintweet:
        # 同步追加当前推文所属的用户名
        user_name_list.append(user_name)
        tweet_id_list.append(tweet.id)
        # 取tweet.text获取实际推文内容
        tweet_text_list.append(tweet.text)
        tweet_created_list.append(tweet.created_at)

df = pd.DataFrame({
    'name': user_name_list,
    'tweet_id': tweet_id_list,
    'tweet_text': tweet_text_list,
    'tweet_created': tweet_created_list,
})
df.to_csv('BerlinTest2.csv', sep=',', index=False, encoding='utf-8-sig')

修改后所有用户的推文会按顺序追加到对应列表中,不会出现数据覆盖的问题,导出的CSV每一行都能对应到正确的用户和推文内容。


内容的提问来源于stack exchange,提问作者Max Mastermann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 01:06:29