2016-08-05 19 views
0

Ich benutze Tweepy Streamer, um einige Tweets für bestimmte Tags zu sammeln, in diesem Fall #python. Der Streamer-Teil des Skripts funktioniert gut, aber wo ich Schwierigkeiten habe, entziehe ich die Informationen aus der Ausgabe.Python - Tweepy Regex

Tweepy Beispiel: { "created_at": "Fr 5. August 17.27.00 +0000 2016", "id": 761614496666361857 "id_str": "761614496666361857", "text": „Verwenden Sie unterschiedlichen Python Version mit virtualenv #py thon #virtualenv #virtualenvwrapper https://t.co/ecedKrCX0L“,‚Quelle‘:

Von der Probe, ich mag den fett gedruckten Text extrahieren und drucken, aber ich kann nicht scheinen Damit funktioniert das richtig. Bisher habe ich kommen mit:

class MyListener(StreamListener): 
     def on_data(self, data): 
       try: 
         pattern = re.compile(r'"text":"(.*?)","') 
         for line in data: 
             x = pattern.search(data) 
             f = open('tmp', 'a') 
             f.write(data) 
             f.close 
             return True 
         else: 
           pass 

       except BaseException as e: 
         print("Error on_data: %s" % str(e)) 
         return True 

Doch diese extrahieren nicht die Besonderheiten Ich bin nach und setzt eine vollständige tweepy Ausgabe zu drucken.

Jede Hilfe wäre willkommen!

Dank

+1

Riecht wie JSON. Hast du das [JSON Modul] (https://docs.python.org/3/library/json.html) schon ausprobiert? –

+0

Noch nicht, das ist wahrscheinlich der nächste auf der Liste. Habe das CSV-Modul ohne Glück versucht, aber ich bin nicht 100% wenn es JSON ist. Wird weiter untersuchen! – user1634278

+1

Es ist 100% JSON, basierend auf dem von Ihnen angegebenen Beispiel. –

Antwort

1

Die easisest Art und Weise, wenn Sie den Text extrahieren möchte, ist mit json-Modul.

import json 
class MyListener(StreamListener): 

    def on_data(self, data): 
      try: 
        json.loads(data) 
        f = open('tmp', 'a') 
        f.write(data["text"]) 
        f.close() 
      except BaseException as e: 
        print("Error on_data: %s" % str(e)) 
        return True 

Aber wenn Sie einen regulären Ausdruck verwenden, dies wird der Code:

class MyListener(StreamListener): 
    def on_data(self, data): 
      try: 
        pattern = re.compile(r'"text":"([^",]*)","') 
        for line in data: 
            x = pattern.search(data) 
            f = open('tmp', 'a') 
            f.write(data) 
            f.close 
            return True 
        else: 
          pass 

      except BaseException as e: 
        print("Error on_data: %s" % str(e)) 
        return True