python csv writer with tweepy streaming

时间:2017-09-23 16:10:51

标签: python csv twitter

今天我决定将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编写器。关于如何改进它的任何进一步建议? 我感谢任何努力! !

亲切的问候

1 个答案:

答案 0 :(得分:0)

工作示例你可以适应。您可以选择使用utf8utf-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