Tweepy no devolver la cantidad dada de tweets

Tengo el siguiente código

api = tweepy.API(auth,wait_on_rate_limit=True)
for tweet in tweepy.Cursor(api.search,
                            tweet_mode="extended",
                            q=query + " exclude:retweets").items(11000):
    hashtags = "#" + " #".join([hashtag['text'] for hashtag in tweet.entities.get('hashtags')])
    print(i)

    if tweet.place:
        tweet_place = tweet.place.full_name + ', ' + tweet.place.country_code
    else:
        tweet_place = "Not Geo-tagged"
    i += 1
    
    csvWriter.writerow([tweet.id, tweet.full_text.encode('utf-8'), tweet.created_at, tweet.lang, tweet.retweet_count, tweet.favorite_count, tweet_place, tweet.user.id, tweet.user.screen_name, tweet.user.followers_count, tweet.user.friends_count, tweet.user.created_at, tweet.user.favourites_count, tweet.user.statuses_count, tweet.user.lang, tweet.user.verified, tweet.user.location])

Estoy tratando de conseguir 11000 tweets con una consulta de búsqueda específica pero después de algún tiempo lanza el siguiente error:

Traceback (most recent call last):
  .............
ConnectionResetError: [Errno 54] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  .............
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  .............
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  .............
tweepy.error.TweepError: Failed to send request: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer'))

Antes ocurría alrededor de 2500 tweets pero al cambiar la consulta empezó a suceder en alrededor de 5000 tweets. ¿Alguna idea de lo que puede estar mal y cómo puedo arreglarlo?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por binarybrainiac


3 Respuestas:

  • su más probable porque ha superado la cantidad permitida de tweets que puede tirar a la vez / por 15 minutos

    cheque Aquí. para más información.

    Respondida el Dec 18, 2020 a las 02:45 - por logicloom

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando indica que la conexión se está restableciendo por parte del servidor, posiblemente debido a un límite de tiempo o a un bloqueo por parte de la API de Twitter. Aquí hay algunas sugerencias que podrían ayudarte a resolver este problema:

    • Limita la cantidad de tweets solicitados por iteración: En lugar de tratar de obtener 11000 tweets en una sola llamada, intenta disminuir la cantidad de tweets solicitados por iteración. Puedes intentar con 100 o 200 tweets por vez y ver si esto ayuda a reducir los errores de conexión.
    • Añade manejo de errores y espera por las tasas límite: Puedes añadir manejo de errores que atrape excepciones relacionadas con las tasas límite de la API de Twitter y espera un periodo breve antes de reintentar la solicitud.
    • Revisa las restricciones de la API de Twitter: Verifica si estás cumpliendo con las restricciones de la API de Twitter en cuanto a las tasas de solicitud. Es posible que estés excediendo el límite permitido.
    • Considera utilizar la paginación de la API de Twitter: En lugar de utilizar `tweepy.Cursor`, intenta implementar la paginación manualmente para tener un mayor control sobre las solicitudes realizadas a la API y evitar problemas con la conexión.

    Implementar estas sugerencias podría ayudarte a evitar los errores de conexión que estás experimentando al intentar obtener una gran cantidad de tweets en una sola llamada.

    Respondida el Dec 19, 2020 a las 02:47 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema que estás experimentando se debe probablemente a que alcanzas el límite de velocidad de Twitter. La API de Twitter limita el número de solicitudes que puedes hacer en un periodo de tiempo determinado. Cuando alcanzas este límite, Twitter te devolverá un error de conexión restablecida.

    Hay algunas cosas que puedes hacer para solucionar este problema:

    Reduce el número de solicitudes que haces. Esto significa que debes reducir el número de tweets que intentas recuperar en cada solicitud. En lugar de intentar recuperar 11000 tweets, intenta recuperar un número menor, como 1000 o 2000. Aumenta el tiempo de espera entre solicitudes. Esto significa que debes esperar más tiempo entre cada solicitud que realices. Puedes hacerlo estableciendo el argumento wait_on_rate_limit en True al crear el objeto tweepy.API. Esto hará que Tweepy espere automáticamente el tiempo necesario entre solicitudes para evitar alcanzar el límite de velocidad. Utiliza múltiples cuentas de Twitter.* Si tienes acceso a varias cuentas de Twitter, puedes utilizarlas para distribuir tus solicitudes. Esto te permitirá recuperar más tweets en el mismo periodo de tiempo sin alcanzar el límite de velocidad.

    Aquí tienes un ejemplo modificado de tu código que implementa estas recomendaciones:

    python
    import tweepy
    
    

    Define tus credenciales de Twitter

    consumer_key = 'YOUR_CONSUMER_KEY' consumer_secret = 'YOUR_CONSUMER_SECRET' access_token = 'YOUR_ACCESS_TOKEN' access_token_secret = 'YOUR_ACCESS_TOKEN_SECRET'

    Crea un objeto de autenticación

    auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret)

    Crea un objeto API

    api = tweepy.API(auth, wait_on_rate_limit=True)

    Define tu consulta de búsqueda

    query = 'YOUR_QUERY'

    Recupera tweets en grupos de 1000

    tweets = tweepy.Cursor(api.search, tweet_mode="extended", q=query + " exclude:retweets").items(1000)

    Procesa los tweets

    for tweet in tweets: hashtags = "

    " + " #".join([hashtag['text'] for hashtag in tweet.entities.get('hashtags')])

    if tweet.place: tweet_place = tweet.place.full_name + ', ' + tweet.place.country_code else: tweet_place = "Not Geo-tagged"

    ... Tu código aquí ...

    Respondida el Dec 19, 2020 a las 02:55 - por Gemini

    Votos positivos: 0 | Votos negativos: 0