2017-10-21 50 views
0

Je trouve ce code python pour gratter twitter par des requêtes de recherche personnalisées:Comment sauvegarder les résultats dans csv en utilisant un grattoir python?

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

Je veux stocker les résultats de ce code dans un fichier csv.

J'ai essayé d'ajouter l'écrivain csv à la ligne autour de 245 au sein de la boucle qui imprime les tweets selon ma requête de recherche, mais les résultats de fichier csv comme blanc

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 

Aussi, il y a un commentaire dans le code à la ligne 170 qui mentionne:

@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. 
    """ 

Comment puis-je utiliser cette classe pour enregistrer les tweets?

Répondre

1

Votre problème semble être la ligne:

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

En regardant le code sur la page GitHub que vous utilisez, je peux voir log est un enregistreur de python. Le but de log.info est d'écrire la chaîne qui est donnée quelque part (ex: la console, un fichier, ou une combinaison de ceux-ci ou d'autres endroits). Il ne renvoie pas de valeur, donc myCsvRow sera vide.

Ce que vous voulez est plus probable:

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

Bien que, quelques notes sur ce qui suit:

(1) Vous ne mettez pas des virgules entre les entrées, ce qui est commun pour CSVs (CSV = Comma Separated Values), et

(2) Il est en fait risqué d'essayer d'écrire une ligne CSV lorsque l'un de vos champs est un champ de texte qui pourrait contenir des virgules. Si vous écrivez naïvement le texte tel qu'il est, une virgule dans le tweet lui-même ferait que tout ce qui interprète le CSV pense qu'il y a des champs CSV supplémentaires dans la ligne. Heureusement python est livré avec une bibliothèque csv qui vous aidera à éviter ce genre de problèmes.

+0

Merci pour la réponse et le pourboire! –