2016-07-09 5 views
1

Ich habe diesen Python-Code, der Daten von Twitter mit Tweepy und Streming APIs abruft und es stoppt, wenn 1000 Ergebnisse (das ist 1000 Tweets Daten) gefunden hat. Es funktioniert gut, aber das Problem ist, dass, wenn ich versuche, es auf PyCharm auszuführen, es einen Teil der Ergebnisse schneidet. Da der Code alle Daten eines Tweets (ID, Text, Author usw.) zurückgibt, erzeugt er möglicherweise zu viele Daten und die Software verknallt sich. So würde Ich mag den Code, um te ändert nur einige Felder der Twitter-Daten zu erhalten (zum Beispiel. Ich brauche nur den Text des tweet, den Autor, das Datum) Jeder Vorschlag ist willkommenTweepy Streaming Filter Felder

# Import the necessary package to process data in JSON format 
try: 
    import json 
except ImportError: 
    import simplejson as json 

# Import the necessary methods from "twitter" library 
from twitter import Twitter, OAuth, TwitterHTTPError, TwitterStream 

# Variables that contains the user credentials to access Twitter API 
ACCESS_TOKEN = '' 
ACCESS_SECRET = '' 
CONSUMER_KEY = '' 
CONSUMER_SECRET = '' 


oauth = OAuth(ACCESS_TOKEN, ACCESS_SECRET, CONSUMER_KEY, CONSUMER_SECRET) 

# Initiate the connection to Twitter Streaming API 
twitter_stream = TwitterStream(auth=oauth) 

# Get a sample of the public data following through Twitter 
#iterator = twitter_stream.statuses.sample() #SEMPLICE TWITTER STREAMING 

iterator = twitter_stream.statuses.filter(track="Euro2016", language="en") #tWITTER STREAMING IN BASE AD UNA TRACK DI RICERCA E AL LINGUAGGIO PER ALTRI SETTAGGI VEDERE https://dev.twitter.com/streaming/overview/request-parameters 
#PER SETTARE PARAMETRI RICERCA https://dev.twitter.com/streaming/overview/request-parameters 


# Print each tweet in the stream to the screen 
# Here we set it to stop after getting 1000 tweets. 
# You don't have to set it to stop, but can continue running 
# the Twitter API to collect data for days or even longer. 
tweet_count = 1000 #SETTAGGIO DI QUANTI RISULTATI RESTITUIRE 
for tweet in iterator: 
    tweet_count -= 1 
    # Twitter Python Tool wraps the data returned by Twitter 
    # as a TwitterDictResponse object. 
    # We convert it back to the JSON format to print/score 
    print(json.dumps(tweet)) 

    # The command below will do pretty printing for JSON data, try it out 
    # print json.dumps(tweet, indent=4) 

    if tweet_count <= 0: 
     break 

Antwort

1

Ich konnte dies für 1000 Tweets ohne Probleme auf PyCharm laufen lassen. Versuchen Sie also, dies auf einem anderen Computer auszuführen oder untersuchen Sie, ob Probleme mit Ihrem vorhandenen System vorliegen.

Das Ergebnis ist ein Python-Wörterbuch, so alles, was Sie einzelne Elemente zugreifen müssen, ist, wie unter

for tweet in iterator: 
    tweet_count -= 1 
    #access the elements such as 'text','created_at' ... 
    print tweet['text'] 
+0

meine PyCharm druckt alle Daten von 1000 Tweets aber, wenn der Prozess beendet ist, und ich versuche, nach oben zu rollen die Daten finde ich heraus, dass abgeschnitten sind, wie die Speicher-Software nicht in der Lage war, alle Daten zu behalten, und ich verstehe warum! Außerdem ist das nicht möglich das sind Probleme mit dem RAM meines Notebooks, der 16 GB RAM hat. Aber wie kann ich tun, wenn für z. Ich möchte die Spalte "screen_name" erhalten, die in der Spalte "user" verschachtelt ist? –

+0

@AndreaAngeli Die Struktur ist ein Lexikon des Wörterbuchs. Um auf 'screen_name' zuzugreifen, könnten Sie' print tweet ['user'] ['screen_name'] '' verwenden –