Tony Wang6 min de lecturaCómo scrapear Twitter/X en 2026 (API y Python)
Tres formas de scrapear Twitter/X en 2026: Python DIY, herramientas sin código o una API estructurada para perfiles, posts y timelines públicos.
La forma más rápida de scrapear Twitter/X en 2026 es llamar a una API de X estructurada que devuelve JSON normalizado — perfiles públicos, posts y primeras páginas de timeline — en lugar de manejar un navegador headless a través de la API GraphQL oculta de X, sus guest tokens y sus identificadores rotativos. Hacerlo tú mismo (DIY) sigue siendo posible, pero los caminos fáciles se han cerrado todos: las librerías gratuitas están muertas, la API oficial tiene precios pensados para empresas, y X rehace sus defensas cada pocas semanas. Esta guía cubre las tres opciones, qué devuelve cada una, dónde se rompe cada una y los conceptos legales básicos.
¿Es legal scrapear Twitter/X?
Ve con cuidado. Scrapear datos públicos de X (perfiles públicos, posts públicos) suele ser legal en EE. UU. — hiQ v. LinkedIn determinó que acceder a datos web públicos no viola la Computer Fraud and Abuse Act (CFAA). Pero esa es la línea penal, no toda la historia: los Términos de Servicio de X prohíben explícitamente el scraping, así que es un asunto contractual que puede acabar en el baneo de tu cuenta o tu IP, y X ha litigado de forma agresiva contra scrapers. Los posts públicos también pueden contener datos personales regulados por el GDPR/CCPA cuando los almacenas o procesas. Reglas prácticas: solo datos públicos y no personales; nunca toques cuentas protegidas, DMs, ni nada que esté detrás de un login; no acumules datos más tiempo del necesario; respeta los límites de tasa. Consulta is web scraping legal. Esto no es asesoría legal.
Opción 1: Hacerlo tú mismo en Python (y por qué se rompe)
La web app de X es un cliente GraphQL: cada perfil y cada timeline que ves se obtiene de una API interna oculta protegida por guest tokens, doc_ids y límites de tasa. Los antiguos atajos — snscrape, Twint y Nitter — compartían todos una misma dependencia, el acceso anónimo como invitado, y todos se rompieron cuando X lo bloqueó. Lo que aún funciona es la automatización de navegador, que deja que la página misma solicite sus propios tokens mientras tú capturas el JSON que dispara en segundo plano:
from playwright.sync_api import sync_playwright
# Conceptual skeleton — not a maintained solution
with sync_playwright() as pw:
browser = pw.chromium.launch(
proxy={"server": "http://residential-proxy:8000"} # datacenter IPs get banned fast
)
page = browser.new_page()
page.goto("https://x.com/nasa")
page.wait_for_selector("[data-testid='primaryColumn']")
# From here you still handle guest tokens, doc_ids, and rate limits yourself
print(page.content())
Funciona en una demo y luego se rompe:
- Los guest tokens caducan. Cada llamada GraphQL necesita uno, duran unas horas, y X ata cada token a la IP que lo solicita — así que rotar de IP a mitad de sesión rompe el token.
- Los
doc_ids rotan. Los identificadores que enrutan las consultas GraphQL (UserTweets,TweetResultByRestId) cambian cada 2–4 semanas; las consultas hardcodeadas entonces fallan en silencio o devuelven resultados vacíos. - Las IPs de datacenter se banean al instante. Necesitas proxies residenciales rotativos con un ritmo cuidadoso (~300 solicitudes/hora en modo anónimo) o te comes
429s y bloqueos en una o dos solicitudes. - La API oficial no rescata el DIY. Desde febrero de 2026, X pone por defecto a los nuevos desarrolladores en pago por uso (~0,005 $ por cada lectura de post de terceros, con un tope de 2M de lecturas/mes) sin tier de lectura gratuito; los tiers legacy Basic (200 $/mes, solo búsqueda de 7 días) y Pro (5.000 $/mes, archivo completo) están cerrados a nuevas altas. Es el camino conforme vía Tweepy, pero el coste hace que scrapear páginas públicas a escala sea inviable.
El coste real no es escribir el scraper — es volver a arreglarlo cada pocas semanas, lo que suele comerse entre 10 y 15 horas al mes.
Opción 2: Herramientas sin código
Los extractores visuales y las extensiones de navegador exportan CSV/JSON — bien para un pull puntual de un perfil público, menos para pipelines de producto que necesitan campos predecibles, y heredan la misma fragilidad de guest tokens y límites de tasa que el DIY.
Opción 3: Una API de X estructurada
Para flujos de trabajo repetibles sobre datos públicos, una X scraping API devuelve JSON normalizado sin navegador que ejecutar, sin tokens que refrescar, y con los proxies gestionados detrás de una sola key. Obtener un perfil público:
curl https://api.crawlora.net/api/v1/x/profile/USERNAME \
-H "x-api-key: $CRAWLORA_API_KEY"
La misma llamada en Python:
import requests
profile = requests.get(
"https://api.crawlora.net/api/v1/x/profile/USERNAME",
headers={"x-api-key": "YOUR_API_KEY"},
).json()["data"]
print(profile["username"], profile["metrics"]["followers"])
Una respuesta es JSON normalizado (los campos son ilustrativos — revisa los docs):
{
"data": {
"username": "NASA",
"name": "NASA",
"id": "11348282",
"description": "Making the seemingly impossible, possible. ✨",
"location": "Pale Blue Dot",
"is_blue_verified": true,
"metrics": { "followers": 92157321, "following": 119, "posts": 74188 }
}
}
Extrae los posts de la primera página de un perfil y luego un post concreto por su id numérico:
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/x"
posts = requests.get(f"{base}/profile/NASA/posts", headers=h, params={"limit": 20}).json()["data"]
first_id = posts["posts"][0]["id"]
post = requests.get(f"{base}/post/{first_id}", headers=h, params={"username": "NASA"}).json()["data"]
print(post["text"], post["metrics"]["likes"], post["metrics"]["views"])
El endpoint de posts solo lee el payload de la primera página pública (limit 1–50, por defecto 20) — no pagina respuestas, pestañas de media ni búsqueda. Pasa username a /post/{id} para rechazar autores que no coincidan. Cíñete a campos públicos y no personales.
¿Qué enfoque deberías usar?
| DIY Playwright | Herramientas sin código | API de X estructurada | |
|---|---|---|---|
| Tiempo de configuración | Alto | Bajo | Bajo |
| Mantenimiento | 10–15 h/mes | Se rompe con X | Resuelto por ti |
| Guest tokens / doc_ids | Los rastreas tú | Los rastreas tú | Resuelto detrás de la key |
| Proxies | Rotas residenciales tú mismo | Normalmente tuyos | Incluidos |
| Mejor para | Control total, una plataforma | Exportaciones puntuales | Pipelines repetibles |
Qué puedes recolectar
Donde la página pública los expone: username, nombre visible, id numérico, bio, ubicación, verificación, contadores de seguidores/seguidos/posts, y media del perfil — más, por cada post, texto, timestamp, URL, contexto del autor y engagement visible (likes, respuestas, reposts, vistas, guardados). Las cuentas protegidas, los DMs, las listas completas de seguidores y la búsqueda por palabra clave/timeline están detrás de un login y quedan fuera de alcance.
Limitaciones y desafíos comunes
- Solo la superficie anónima. Los perfiles públicos, los posts individuales y la primera página de timeline son accesibles; las cuentas protegidas, los DMs, las listas de seguidores y la búsqueda requieren login y cruzan la línea de los ToS.
- Primera página, no el archivo. El endpoint de posts de perfil devuelve el payload público inicial, no un catálogo histórico paginado — la búsqueda histórica completa es una funcionalidad de la API Pro/Enterprise (5.000 $/mes+), no un objetivo de scraping.
- El objetivo en movimiento. X lanza cambios defensivos cada 2–4 semanas (guest tokens,
doc_ids, scoring de IPs); una API estructurada absorbe eso para que tu pipeline siga devolviendo datos. - Encuentra URLs fuera de la plataforma. La propia búsqueda de X está tras un login, pero Google indexa posts públicos —
site:x.com inurl:status <keyword>construye una lista de objetivos sin necesidad de cuenta. - Las identidades son datos personales. Los usernames, los nombres y el contenido de los posts son datos personales bajo GDPR/CCPA — recolecta solo campos públicos y factuales con una base legal.
Dónde se usa esto
- Monitorización de marca — rastrea la presencia pública de marca y competidores en X. Consulta el caso de uso brand monitoring.
- Escucha social y sentimiento — muestrea posts públicos sobre un tema para investigación.
- Investigación de creadores — evalúa perfiles públicos, alcance y engagement; combínalo con señales de TikTok y YouTube.
Fuentes
Empieza a recolectar
Pruébalo primero, gratis: pasa cualquier URL pública por el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba el endpoint de perfil en el Playground, revisa el esquema en los API docs y consulta la pricing. Consulta también how to scrape Instagram, how to scrape TikTok, how to scrape YouTube y how to scrape LinkedIn para el resto del stack social, además de how to scrape Bluesky y how to scrape Telegram para las alternativas más nuevas en tiempo real, how to choose a web scraping API, e is web scraping legal. Para una comparación completa con otras APIs de datos de X — incluyendo los tiers de precios 2026 de la API oficial, TwitterAPI.io y SocialData.tools — consulta best Twitter/X scraper APIs in 2026.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Todavía puedo scrapear Twitter/X en 2026?
Sí, los datos públicos de X (perfiles, posts individuales, primeras páginas de timeline) siguen siendo scrapeables, pero todos los caminos fáciles se han cerrado: snscrape, Twint y Nitter murieron cuando X bloqueó el acceso anónimo como invitado, y la API oficial no tiene ningún tier de lectura gratuito. Hacerlo tú mismo ahora significa manejar Playwright a través de la API GraphQL oculta de X con guest tokens, doc_ids rotativos y proxies residenciales; una API estructurada gestiona todo eso detrás de una sola key.
¿Es gratis la API oficial de X?
No. Desde febrero de 2026, X pone por defecto a los nuevos desarrolladores en pago por uso (unos 0,005 $ por cada lectura de post de terceros, con un tope de 2M de lecturas/mes) sin tier de lectura gratuito. Los tiers legacy Basic (200 $/mes, solo búsqueda de 7 días) y Pro (5.000 $/mes, archivo completo) están cerrados a nuevas altas, y Enterprise empieza en torno a los 42.000 $/mes.
¿Por qué los scrapers DIY de Twitter se rompen todo el tiempo?
La web app de X es un cliente GraphQL protegido por tres mecanismos rotativos: guest tokens que caducan en unas horas y están atados a la IP que los solicita, doc_ids que enrutan las consultas y rotan cada 2–4 semanas, y un scoring de reputación de IP que banea rangos de datacenter al instante. Los scrapers hardcodeados fallan en silencio cuando cualquiera de estos cambia, lo que suele costar entre 10 y 15 horas de mantenimiento al mes.
¿Es legal scrapear Twitter/X?
Scrapear datos públicos suele ser legal en EE. UU. — hiQ v. LinkedIn determinó que acceder a datos web públicos no viola la CFAA — pero los Términos de Servicio de X prohíben explícitamente el scraping, así que es un asunto contractual que puede acabar en el baneo de una cuenta o una IP, y X ha litigado contra scrapers. Los posts públicos también pueden ser datos personales bajo GDPR/CCPA. Cíñete a campos públicos y no personales; nunca toques cuentas protegidas, DMs, ni nada que esté detrás de un login. Esto no es asesoría legal.
¿Qué datos de X puedo recolectar?
Solo campos públicos: username, nombre visible, id numérico, bio, ubicación, verificación, contadores de seguidores/seguidos/posts, media del perfil, y por cada post: texto, timestamp, URL, contexto del autor y engagement visible (likes, respuestas, reposts, vistas, guardados). Las cuentas protegidas, los DMs, las listas completas de seguidores y la búsqueda por palabra clave/timeline están detrás de un login y quedan fuera de alcance.
¿Cómo obtengo los posts de un perfil y un post individual?
Llama a /x/profile/{username}/posts para obtener la primera página pública de posts (limit 1–50, por defecto 20 — no pagina respuestas, pestañas de media ni búsqueda), y luego a /x/post/{id} para un post individual, pasando opcionalmente username para rechazar autores que no coincidan. La búsqueda histórica completa es una funcionalidad de la API Pro/Enterprise, no un objetivo de scraping.
¿Con qué frecuencia puedo actualizar los datos?
Ejecuta snapshots programados para rastrear la presencia pública y el engagement a lo largo del tiempo, dentro de los límites de tu plan y de un uso responsable, en lugar de hacer polling continuo.