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

如何用try-except处理Twitter API爬取已删除推文的报错问题

解决Twitter API爬取删除推文报错的问题

你当前的代码把try-except放在整个循环外面,只要遇到一个报错就会中断整个爬取流程。正确的做法是把异常处理放到循环内部,针对每个推文ID单独处理,这样就能实现跳过异常ID或用NaN填充对应数据的需求。

方案1:跳过已删除的推文

如果不需要保留已删除推文的ID,直接跳过这类报错的ID即可:

tweet_ids = twitter_archive['tweet_id']

tweet_id = []
likes = []
retweets = []

for ids in tweet_ids:
    try:
        tweet = api.get_status(ids)
        tweet_id.append(ids)
        likes.append(tweet.favorite_count)
        retweets.append(tweet.retweet_count)
    except Exception as e:
        # 可选:打印报错信息,方便排查问题
        print(f"处理ID {ids} 时出错: {e}")
        # 跳过当前ID,继续处理下一个
        continue

tweet_info = pd.DataFrame({'tweet_id': tweet_id, 'likes': likes, 'retweets': retweets})

方案2:用NaN填充已删除推文的数据

如果需要保留所有推文ID,对已删除的推文用NaN填充点赞和转发数:

import numpy as np
tweet_ids = twitter_archive['tweet_id']

tweet_id = []
likes = []
retweets = []

for ids in tweet_ids:
    try:
        tweet = api.get_status(ids)
        likes.append(tweet.favorite_count)
        retweets.append(tweet.retweet_count)
    except Exception as e:
        print(f"处理ID {ids} 时出错: {e}")
        likes.append(np.nan)
        retweets.append(np.nan)
    # 无论是否报错,都保留当前ID
    tweet_id.append(ids)

tweet_info = pd.DataFrame({'tweet_id': tweet_id, 'likes': likes, 'retweets': retweets})

补充说明

  • 将try-except放在循环内,确保单个ID报错不会终止整个爬取任务
  • 捕获Exception可以覆盖大部分API报错场景(比如推文不存在、权限不足等),你也可以根据使用的Twitter库捕获更精准的异常(如tweepy.error.TweepError)
  • 方案2需要导入numpy生成NaN,若不想依赖numpy,也可以用None,但NaN更适配pandas数据框的数值类型处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:48:16