今天我决定将twitter流导出为CSV文件。但是,我似乎无法让它发挥作用。处理以退出代码0结束 - 因此错误代码不提供任何信息。
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
import time
from textblob import TextBlob
import csv
# consumer key, consumer secret, access token, access secret.
from streamertest_config import *
class StdOutlistener(StreamListener):
def on_connect(self):
print("Connected to streaming API")
def on_data(self, data):
all_data = json.loads(data)
tweet = TextBlob(all_data["text"])
tweet_id = all_data(["id"])
# Adding polarity and subjectivity as separated values
tweet_pol = tweet.sentiment.polarity
tweet_sub = tweet.sentiment.subjectivity
time.sleep(0.1)
print(tweet)
print(tweet_pol)
print(tweet_sub)
with open('tweets.csv', 'a') as tf:
writer =csv.writer(tf)
tf.write('\n')
writer.writerow(["tweet", "tweet_id", "tweet_pol", "tweet_sub"])
writer.writerows([tweet, tweet_id, tweet_pol, tweet_sub])
return True
# Parsing the api user credentials
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
# Starting the search. In case of error try again
def start_stream():
while True:
try:
twitter_stream = Stream(auth, StdOutlistener())
twitter_stream.filter(track=["Trump"], languages=["en"])
except:
return
start_stream()
#except Exception as e:
#print("[!] Error: %s" % e)
#return
在我使用JSON格式并导出所有正常工作的数据之前。 但是,这次我想导出一些特定字段(推文,推文ID,tweet_pol,tweet_sub)。
有人可以向我解释我应该如何对此进行编码吗?而且,也许你可以推荐一本可以帮助我完成这些基本任务的书?
编辑:现在部分工作了。上面的代码写了一行CSV行。 但是,推文文本用很多逗号分隔。 输出示例:" @,s,c,o,r,k,r,e,n ,, @,W,a,t,c,h,O,u,t,f,o,r, L,u,c,y ,,,, b,l,a,k,e,m,s,u,,@,"
第二,它在第一条推文后停止工作。最后,tweet_pol和tweet_sub没有通过csv编写器。关于如何改进它的任何进一步建议? 我感谢任何努力! !
亲切的问候
答案 0 :(得分:0)
工作示例你可以适应。您可以选择使用utf8
或utf-8-sig
编码。 UTF-8允许将任何Unicode字符编码为CSV。后一种编码提供了一个初始BOM字符,可帮助某些工具(如Excel)正确读取CSV。记录newline=''
以在打开文件时与csv.writer
一起使用。
#coding:utf8
import csv
def setup():
'''Open and truncate file. Write header.
'''
with open('tweets.csv','w',encoding='utf-8-sig',newline='') as tf:
writer = csv.writer(tf)
writer.writerow(["tweet","tweet_id","tweet_pol","tweet_sub"])
def write(tweet,tweet_id,tweet_pol,tweet_sub):
with open('tweets.csv','a',encoding='utf-8-sig',newline='') as tf:
writer = csv.writer(tf)
writer.writerow([tweet,tweet_id,tweet_pol,tweet_sub])
setup()
write('中文tweet',1,'something','something else')
write('Español tweet',2,'something','something else')
输出:
tweet,tweet_id,tweet_pol,tweet_sub
中文tweet,1,something,something else
Español tweet,2,something,something else