---
title: "Scraping de Twitter (X) con Python: tweets, seguidores y exportación a CSV"
description: "Tutorial de Python: extrae tweets y seguidores públicos de X (Twitter) con la API REST de TwexAPI, recorre las páginas y guárdalos en CSV. Sin navegador, proxies ni cuenta de X."
---

Esta guía extrae datos públicos de X (Twitter) desde Python con peticiones HTTP normales. Buscas tweets con operadores de búsqueda avanzada, recorres las páginas de resultados, exportas una lista de seguidores y lo guardas todo en CSV. No necesitas un navegador headless, proxies ni una cuenta de X, solo una clave de API de TwexAPI.

## Antes de empezar

1. Crea una cuenta en [twexapi.io](https://twexapi.io/get-started) para recibir 20.000 Credits gratis, unas 4.000 lecturas.
2. Copia tu clave de API desde el panel y expórtala:

```bash
export TWEXAPI_KEY="twexapi_xxx"
pip install requests
```

## Buscar tweets

El [endpoint de búsqueda avanzada](/es/api-reference/search-endpoints/get-data-page-twitter-advanced-search-page-post) recibe una lista de `searchTerms`, un `sortBy` con `Latest` o `Top` y un `next_cursor` para paginar. Cada página devuelve hasta 20 tweets.

```python
import os
import time

import requests

API = "https://api.twexapi.io"
HEADERS = {"Authorization": f"Bearer {os.environ['TWEXAPI_KEY']}"}


def paginate(path, body, max_items):
    """POST a cursor endpoint until max_items rows or the last page."""
    items, cursor = [], ""
    while len(items) < max_items:
        res = requests.post(f"{API}{path}", headers=HEADERS, json={**body, "next_cursor": cursor}, timeout=30)
        res.raise_for_status()
        page = res.json()
        items += [row for row in page.get("data", []) if row]
        cursor = page.get("next_cursor")
        if not page.get("has_next_page") or not cursor:
            break
        time.sleep(5)  # free Starter plan: 1 request per 5 seconds; paid plans allow 5+ per second
    return items[:max_items]


tweets = paginate(
    "/twitter/advanced_search/page",
    {"searchTerms": ["openai", "lang:en", "min_faves:100", "since:2026-10-01"], "sortBy": "Latest"},
    max_items=200,
)
print(len(tweets), "tweets")
```

`searchTerms` acepta los mismos operadores que el buscador de X:

| Operador | Ejemplo | Significado |
| :--- | :--- | :--- |
| `from:` | `from:nasa` | Publicaciones de una cuenta |
| `since:` / `until:` | `since:2026-10-01` | Rango de fechas |
| `lang:` | `lang:es` | Idioma |
| `min_faves:` | `min_faves:100` | Mínimo de me gusta |
| `-filter:replies` | | Excluir respuestas |

## Guardar los tweets en CSV

```python
import csv

with open("tweets.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["tweet_id", "created_at", "user", "likes", "retweets", "text"])
    for t in tweets:
        writer.writerow([
            t.get("tweet_id"),
            t.get("created_at"),
            (t.get("user") or {}).get("screen_name"),
            t.get("favorite_count"),
            t.get("retweet_count"),
            (t.get("text") or "").replace("\n", " "),
        ])
```

Con `utf-8-sig`, los acentos y emojis se ven bien al abrir el archivo en Excel.

## Extraer seguidores

El [endpoint de seguidores](/es/api-reference/followers-following-endpoints/get-followers-cursor-apiendpoint-twitter-followers-page-post) usa la misma paginación por cursor, así que la función `paginate` sirve sin cambios.

```python
followers = paginate("/twitter/followers/page", {"screen_name": "nasa"}, max_items=1000)

with open("followers.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["username", "name", "followers", "location", "bio"])
    for u in followers:
        writer.writerow([u.get("username"), u.get("name"), u.get("followersCount"), u.get("location"), u.get("description")])
```

## Coste

Una lectura típica cuesta 5 Credits, unos $0,05 por cada 1.000 tweets o seguidores. Los 200 tweets y 1.000 seguidores del ejemplo cuestan unos $0,06 en total. Consulta los [precios](/es/guides/pricing) para ver las tarifas exactas.

## ¿Por qué no Selenium, Playwright o twscrape?

Desde que X cerró el acceso de invitados a principios de 2024, los scrapers basados en navegador y los de código abierto necesitan cuentas de X con sesión iniciada y proxies rotativos, y se rompen cuando X cambia su sitio. Una API te quita ese mantenimiento. Para una comparación más completa, consulta [Scraper propio de Twitter vs TwexAPI](/es/comparison/scraper-vs-api).

## Siguientes pasos

- [Resumen de la API de scraping de Twitter](https://twexapi.io/twitter-scraper): qué datos puedes extraer y cómo se compara con Apify y la API oficial.
- [Manejo de errores](/es/guides/error-handling): reintentos y espera ante respuestas `429` y `5xx`.
- Recoge solo datos públicos y respeta la normativa de privacidad y los términos de X.
