Saltar al contenido
Twexapi
Español
Esc
↑↓navegar↵abrir⌘Jvista previa
En esta página

Scraping de Twitter (X) con Python: tweets, seguidores y exportación a CSV

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 para recibir 20.000 Credits gratis, unas 4.000 lecturas.
  2. Copia tu clave de API desde el panel y expórtala:
export TWEXAPI_KEY="twexapi_xxx"
pip install requests

Buscar tweets

El endpoint de búsqueda avanzada recibe una lista de searchTerms, un sortBy con Latest o Top y un next_cursor para paginar. Cada página devuelve hasta 20 tweets.

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

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 usa la misma paginación por cursor, así que la función paginate sirve sin cambios.

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 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.

Siguientes pasos

¿Te ha resultado útil esta página?