2016-08-26 5 views
0

Dies könnte ein super dummer Fehler sein, aber ich kann nicht sehen, was los ist.tweepy IndexError: Listenindex außerhalb des Bereichs

class listener(tweepy.streaming.StreamListener): 
    def on_data(self, data): 
     tweet = data.split(',"text":"')[1].split('","source')[0] 
     screen_name = data.split(',"screen_name":"')[1].split('","location":')[0] 
     print tweet 
     print data 
     return True 
    def on_error(self, status): 
     print status 

def main(): 
    twitterStream = tweepy.Stream(auth, listener()) 
    twitterStream.userstream() 

if __name__ == "__main__": 
    main() 

und der Fehler ist:

Traceback (most recent call last): 
    File "C:\Rex\702_EH\new 1.py", line 35, in <module> 
    main() 
    File "C:\Rex\702_EH\new 1.py", line 32, in main 
    twitterStream.userstream() 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 394, in userstream 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 361, in _start 
    File "build\bdist.win32\egg\tweepy\streaming.py", line 294, in _run 
IndexError: list index out of range 

jemand mir dabei helfen kann, bitte?

Antwort

0

Die Tweets, die Sie erhalten, sind in einem JSON-Format, das sollten Sie nutzen, anstatt zu versuchen, sie als reinen Text zu analysieren. Die Attribute werden viel einfacher zu extrahieren sein, und Ihr Code wird auch viel besser lesbar sein.

class listener(tweepy.streaming.StreamListener): 
    def on_data(self, data): 

     decoded = json.loads(data) 

     tweet = decoded['text'] 
     screen_name = decoded['user']['screen_name'] 
     print tweet 
     print data 
     return True 
    def on_error(self, status): 
     print status 

def main(): 
    twitterStream = tweepy.Stream(auth, listener()) 
    twitterStream.userstream() 

if __name__ == "__main__": 
    main() 

Als Nebenbemerkung, schlage ich Ihnen Python3 wechseln, mit Unicode in Python2 Umgang ganz nightmarish sein kann.

+0

Thx für die Beantwortung, aber dieser Code zeigt: KeyError: 'Text'. irgendwelche weiteren Tipps? – Rex

+0

Auch thx für Ihren Vorschlag, aber für diesen, könnte es zu spät sein, um zu wechseln. – Rex

+0

Versuchen Sie es mit 'decoded.text' oder 'data.text' vielleicht? – Efferalgan

0

Die Ausgabe der Antwort von Tweepy ist JSON. Da JSON ein Standard für die Kommunikation zwischen Anwendungen ist, sollten Sie diesem Standard folgen, indem Sie json lib in python verwenden. Also müssen Sie Tweepy Antwort wie folgt laden:

tweet = json.loads(data) 
username = tweet[user][screeen_name] 
language = tweet[user][lang] 
...... 
..... 
+0

Thx für die Beantwortung, aber hier zeigt einen anderen Fehler: NameError: globaler Name 'Benutzer' ist nicht definiert – Rex

+0

Es ist nur ein Beispiel @Rex, nur die Tweet-Variable und benannte den JSON-Schlüssel, den Sie Wert haben möchten. –

Verwandte Themen