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

Tweepy仅返回1条推文问题排查:循环还是API调用故障?

问题分析与解决方案

嘿,我来帮你排查这个问题!你遇到的只返回1条推文的情况,主要是代码里的文件操作、缩进和数据处理逻辑出了问题,不是Twitter API调用或者for循环本身的锅,咱们一步步拆解:

核心问题点

1. 文件打开模式错误,每次循环覆盖原有内容

你在循环内部使用with open('C:/Users/User/Desktop/twittersentiment.csv', 'wb') as f:,这意味着每处理一条推文,就会重新创建并打开这个文件(wb是二进制写入模式,会直接覆盖文件原有内容)。所以哪怕循环跑了200次,最后文件里只会剩下最后一条处理完的推文。

2. 缩进逻辑错误,导致代码执行范围混乱

你的if 'RT' not in status.text:判断后面,只有with open那行属于if块,后续的变量处理、写入操作都不在判断范围内——这会导致不管是不是转推,都会执行写入,而且缩进错误还会让代码逻辑混乱。

3. zip用法错误,写入数据格式不对

你把location、favourites等单个值包装成了列表(比如a = [location]),然后用zip(a,b,c,d),最后把这个zip对象传给writerow。这会导致写入的是嵌套的元组,而不是我们需要的一行四个字段,同时完全没必要用zip来处理单个值。

修正后的代码

import csv
import re
import tweepy

# 这里假设你已经完成了twitterapi的授权初始化步骤

# 将文件打开操作放在循环外部,使用追加模式避免覆盖
with open('C:/Users/User/Desktop/twittersentiment.csv', 'ab') as f:
    writer = csv.writer(f)
    # 可选:如果是第一次创建文件,可以先写入表头
    # writer.writerow(['User Location', 'Favourites Count', 'Cleaned Tweet', 'Created Date'])
    
    # 遍历Cursor返回的最多200条推文
    for status in tweepy.Cursor(
        twitterapi.search,
        q="labour party",
        since="2018-05-01",
        until="2018-05-10"
    ).items(200):
        # 跳过转推内容
        if 'RT' not in status.text:
            # 提取所需字段
            favourites_count = status.user.favourites_count
            user_location = status.user.location.encode('utf8')
            # 清洗推文文本
            cleaned_tweet = ' '.join(
                re.sub(
                    "(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)",
                    " ",
                    status.text.encode('utf8')
                ).split()
            )
            tweet_date = status.created_at.strftime('%m/%d/%Y')
            
            # 直接将字段组成列表写入一行
            writer.writerow([user_location, favourites_count, cleaned_tweet, tweet_date])

额外优化提示

如果你使用的是Python 3,建议调整文件打开方式,避免手动编码的麻烦:

with open('C:/Users/User/Desktop/twittersentiment.csv', 'a', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    # 后续代码可以去掉.encode('utf8'),直接处理字符串即可

另外需要注意:Twitter标准搜索API有一定的限制(比如只能返回最近7天的推文,且有调用频率限制),但你设置的时间范围和items(200)是符合要求的,修正代码后应该能拿到符合条件的非转推推文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:34