簡體   English   中英

一旦在 CSV 中存儲了 X 條推文,如何停止 Tweepy?

[英]How to stop Tweepy once X amount of tweets have been stored in CSV?

我已經學習 Python 大約一個月了,在看了幾個教程之后,我決定給 Tweepy 一個 go,以分析提取的數據。 但問題是,無論我將 if 語句放在哪里,Tweepy 都不會停止流式傳輸推文。 我正在使用 Python 3.9 和 Tweepy 3.10。

例如,我希望在 CSV 中存儲 10 條推文后停止。

有什么想法嗎?

 # Stream Listener Class
class MyListener(tweepy.StreamListener):
    def on_data(self, raw_data):
        self.num_tweets = 0
        self.file_name = 'path/tweet_stream.csv'
        self.process_data(raw_data)
        return True

    def process_data(self, raw_data):
        print(raw_data)
        with open(self.file_name, mode='a') as f:
            writer = csv.writer(f)
            writer.writerow([raw_data, '\n'])
        self.num_tweets += 1
        if self.num_tweets < 10:
            return True
        else:
            return False


# Creating the Stream
class MyStream():
    def __init__(self, auth, listener):
        self.stream = tweepy.Stream(auth=auth, listener=listener)

    def start(self, keywords):
        self.stream.filter(track=keywords)

# Starting
if __name__ == "__main__":
    listener = MyListener()

我認為每次調用 on_data 時都會將 num 重置為 0,因此如果您將其從 on_data 函數中取出,它可能會解決您的問題。

class MyListener(tweepy.StreamListener):
def __init__(self):
    self.num_tweets = 0
    self.file_name = 'path/tweet_stream.csv'
    
def on_data(self, raw_data):    
    self.process_data(raw_data)
    return True

def process_data(self, raw_data):
    print(raw_data)
    with open(self.file_name, mode='a') as f:
        writer = csv.writer(f)
        writer.writerow([raw_data, '\n'])
    self.num_tweets += 1
    if self.num_tweets < 10:
        return True
    else:
        return False

在弄亂了我的代碼一段時間后,我想出了一個解決方法。 最終用 on_data function 替換了 process_data(因為它更傾向於我所追求的)。

解決方法本身是保留構造函數,為推文創建一個空列表並將狀態 json 寫入 self.file,同時附加列表。 append 方法在 self.num_tweets 計數器之前被調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM