2016-09-21 10 views
0

Tweepyを使用していくつかのつぶやきをスクラップしようとしていますが、数百回のリクエストの後で接続がクラッシュしました。私は除いて/試しにエラーをキャプチャすることができTweepyエラー104:接続が中止されました

for status in tweepy.Cursor(api.search, 
          q="", 
          count=100, 
          include_entities=True, 
          monitor_rate_limit=True, 
          wait_on_rate_limit=True, 
          wait_on_rate_limit_notify = True, 
          retry_count = 5, #retry 5 times 
          retry_delay = 5, #seconds to wait for retry 
          geocode ="34.0207489,-118.6926066,100mi", # los angeles 
          until=until_date, 
          lang="en").items(): 

     try: 
     towrite = json.dumps(status._json) 
     output.write(towrite + "\n") 
     except Exception, e: 
     log.error(e) 
     c+=1 
     if c % 10000 == 0: # 100 requests, sleep 
     time.sleep(900) # sleep 15 min 

が、私は再起動することはできませんよ:」、エラー( "(104 'ECONNRESET')"、))

は私のコードは次のようですカーソルがクラッシュしたポイントからのカーソル。 誰もがこのエラーを解決する方法を知っているか、または最後の既知の状態からカーソルを再起動しますか?

ありがとうございます!

答えて

1

Tweepyの文書では、Requests/15-Minウィンドウ(ユーザー認証)は180ですが、明らかに長時間スリープ状態になると接続の信頼性に影響することがあります。罰金:

for status in tweepy.Cursor(api.search, 
         q="", 
         count=100, 
         include_entities=True, 
         monitor_rate_limit=True, 
         wait_on_rate_limit=True, 
         wait_on_rate_limit_notify = True, 
         retry_count = 5, #retry 5 times 
         retry_delay = 5, #seconds to wait for retry 
         geocode ="34.0207489,-118.6926066,100mi", # los angeles 
         until=until_date, 
         lang="en").items(): 

    try: 
    towrite = json.dumps(status._json) 
    output.write(towrite + "\n") 
    except Exception, e: 
    log.error(e) 
    c+=1 
    if c % 100 == 0: # first request completed, sleep 5 sec 
    time.sleep(5) 
0

tweepy呼び出しがtryブロック内にある必要がありますように私には思えます。また、Tweepy API(http://docs.tweepy.org/en/v3.5.0/api.html#help-methods)にない引数がapi.searchにあります。とにかく、これは私の仕事:

backoff_counter = 1 
while True: 
    try: 
     for my_item in tweepy.Cursor(api.search, q="test").items(): 
      # do something with my_item 
     break 
    except tweepy.TweepError as e: 
     print(e.reason) 
     sleep(60*backoff_counter) 
     backoff_counter += 1 
     continue 

基本的に、あなたはしばらくの間、眠りのエラーを取得し、再度しようとしたとき。増分バックオフを使用してスリープ時間が接続を再確立するのに十分であることを確認しました。

関連する問題