2014-10-07 2 views
0

다음 코드는 대부분 "작동 중"인 것 같습니다. 특정 일 동안 트위터 API에서 모든 트윗을 스크랩하는 것을 의미합니다. True 루프가 깨지는 것은 아니지만 예상 한 "Finished !!" 문자열도 csv 파일을 통해 완료됩니다.파이썬 "while true"루프는 끝나지 않습니다 (파이썬 트위피 사용)

import tweepy 
import time 
import csv 

ckey = "xxx" 
csecret = "xxx" 
atoken = "xxx-xxx" 
asecret = "xxx" 

OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret, 
    'access_token_key':atoken, 'access_token_secret':asecret} 
auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret']) 
api = tweepy.API(auth) 

startSince = '2014-10-03' 
endUntil = '2014-10-04' 
suffix = '_03OCT2014.csv' 

searchTerms = 'xyz' 

tweets = tweepy.Cursor(api.search, q=searchTerms, 
    since=startSince, until=endUntil).items() 

while True: 
    try: 
     for tweet in tweets: 

      placeHolder = [] 
      placeHolder.append(tweet.author.name.encode('utf8')) 
      placeHolder.append(tweet.author.screen_name.encode('utf8')) 
      placeHolder.append(tweet.created_at) 

      prefix = 'TweetData_xyz' 
      wholeFileName = prefix + suffix  
      with open(wholeFileName, "ab") as f: 
       writeFile = csv.writer(f) 
       writeFile.writerow(placeHolder) 

    except tweepy.TweepError: 
     time.sleep(60*15) 
     continue 

    except IOError: 
     time.sleep(60*5) 
     continue 

    except StopIteration: 
     break 

print "Finished!!!" 
+0

결코 예외를 생성하지 않으면 결코 루프를 종료하지 않습니다. – user28470

답변

2

StopIteration은 코드에서 발생하지 않습니다. for 문은 tweepy.Cursor().items()까지 올린 경우 이 아니고이 더 전파됩니다.

while True: 
    try: 
     for tweet in tweets: 
      # do stuff 

     # completed iterating successfully 
     break 

및 전부 except StopIteration: 처리기를 제거 :

for 루프가 끝나면 그냥 탈출.

1

코드에 종료 조건이 없습니다. 오류가 발생하면 루프를 종료하고 싶지 않습니다. 그래서 나는 네가 네 몸을 끝낼 때 너는 나가고 싶다고 생각해. 네?

def process_tweet(tweet): 

    placeHolder = [] 
    placeHolder.append(tweet.author.name.encode('utf8')) 
    placeHolder.append(tweet.author.screen_name.encode('utf8')) 
    placeHolder.append(tweet.created_at) 

    prefix = 'TweetData_xyz' 
    wholeFileName = prefix + suffix  
    with open(wholeFileName, "ab") as f: 
     writeFile = csv.writer(f) 
     writeFile.writerow(placeHolder) 

while True: 
    try: 
     for tweet in tweets: 
      process_tweet(tweet) 
     break 
    except tweepy.TweepError: 
     time.sleep(60*15) 
     continue 

    except IOError: 
     time.sleep(60*5) 
     continue 

    except StopIteration: 
     break 

print "Finished!!!"