2017-10-21 64 views
0

我发现这个Python代码通过自定义搜索查询刮叽叽喳喳:如何使用python刮板将结果保存到csv?

https://github.com/tomkdickinson/Twitter-Search-API-Python/blob/master/TwitterScraper.py

我想从这个代码的结果存储到一个CSV文件。

我试图在内部围绕线245添加CSV作家循环,打印出的鸣叫按我的搜索查询,但CSV文件的结果为空白

def save_tweets(self, tweets): 
    """ 
    Just prints out tweets 
    :return: True always 
    """ 
    for tweet in tweets: 
     # Lets add a counter so we only collect a max number of tweets 
     self.counter += 1 
     if tweet['created_at'] is not None: 
      t = datetime.datetime.fromtimestamp((tweet['created_at']/1000)) 
      fmt = "%Y-%m-%d %H:%M:%S" 
      myCsvRow = log.info("%i [%s] - %s" % (self.counter, t.strftime(fmt), tweet['text'])) 
      fd = open('document.csv','a') 
      fd.write(myCsvRow) 
      fd.close() 

    return True 

另外,有一个在评论代码在170行左右提到:

@abstractmethod 
def save_tweets(self, tweets): 
    """ 
    An abstract method that's called with a list of tweets. 
    When implementing this class, you can do whatever you want with these tweets. 
    """ 

如何使用此类保存推文?

回答

1

你的问题似乎是行:

myCsvRow = log.info("%i [%s] - %s" % (self.counter, t.strftime(fmt), tweet['text'])) 

看着你使用GitHub的页面上的代码,我可以看到log是一个Python记录器。 log.info的目的是编写它在某处的字符串(例如:控制台,文件或这些或其他地方的任何组合)。它不会返回一个值,因此myCsvRow将为空。

你想要的是更容易:

myCsvRow = "%i [%s] - %s" % (self.counter, t.strftime(fmt), tweet['text']) 

虽然,在一对夫妇的笔记:

(1)你是不是把条目,这是很常见的CSV格式之间的逗号(CSV =逗号分隔值)和

(2)当您的某个字段是可能包含逗号的文本字段时,尝试写出csv行实际上是一种风险。如果你天真地只写出文本,推文中的逗号会导致任何解释CSV的人认为该行中有额外的CSV字段。幸运的是python附带了一个csv库,它可以帮助你避免这些问题。

+0

感谢您的答案和提示! –