[英]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.