2016-08-26 5 views
0

이것은 매우 어리석은 실수 일 수 있습니다. 그러나 나는 잘못 된 것을 볼 수 없습니다.tweepy IndexError :리스트 인덱스가 범위를 벗어났습니다

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() 

및 오류는 다음과 같습니다

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 

이 사람이 나를 좀 도와 드릴까요?

답변

0

당신이 얻는 트윗은 JSON 포맷으로되어 있습니다. 일반 텍스트로 파싱하려고 시도하지 않고 그것을 활용해야합니다. 속성을 추출하기가 훨씬 쉬우 며 코드도 훨씬 더 읽기 쉽습니다. (!) 참고로

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() 

, 난 당신이 확실히 악몽이 될 수 Python2에서 유니 코드 처리, Python3로 전환하는 것이 좋습니다.

+0

응답을위한 Thx이지만이 코드는 KeyError : 'text'를 보여줍니다. 더 이상의 팁? – Rex

+0

또한 제안 사항은 thx이지만이 경우 전환하기에는 너무 늦었을 수 있습니다. – Rex

+0

'decoded.text'또는 'data.text'를 사용해 보시겠습니까? – Efferalgan

0

Tweepy 응답의 출력은 JSON입니다. JSON은 애플리케이션 간 내부 통신 표준이므로 python에서 json lib를 사용하여이 표준을 따라야합니다. 따라서 다음과 같은 Tweepy 응답을로드해야합니다.

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

답을위한 Thx이지만 다른 오류가 있습니다. NameError : 전역 이름 'user'가 정의되어 있지 않습니다. – Rex

+0

그냥 @Rex 예제이며, 짹짹 변수를보고 원하는 값인 JSON 키의 이름을 지정하십시오. –

관련 문제