A fecha de 7 de octubre de 2026, Shifter cuenta con el mayor pool de IPs estadounidenses activas, más que Oxylabs y Bright Data, a una fracción del coste.Shifter ahora tiene el mayor conjunto de IPs de EE. UU. activas

Ver comparativas

Conocimiento

Recopilación de datos de redes sociales con APIs modernas de web scraping

Cómo los equipos de marca e investigación recopilan datos sociales públicos con APIs de web scraping: qué recopilar, un esquema único para cada plataforma y datos personales excluidos desde el diseño.

Priya Nair

21 de octubre de 2026 · 8 min de lectura

Las marcas quieren saber qué dice la gente sobre ellas, sus productos y sus competidores, y gran parte de esa conversación ocurre en público: foros, sitios de reseñas, tablones de comunidades y perfiles sociales públicos. Recopilarla es la base de la escucha social, y es más difícil de lo que parece. Cada plataforma estructura sus páginas de forma distinta, muchas renderizan contenido con JavaScript, y casi todo lo que se recopila involucra a personas.

Esta guía cubre cómo los equipos recopilan hoy datos sociales públicos con APIs de web scraping: qué fuentes usar y cuándo las APIs oficiales son la mejor opción, cómo convertir plataformas muy diferentes en un único conjunto de datos, y cómo mantener los datos personales fuera de ese proceso desde el diseño.

Empieza por lo que quieres aprender

Los proyectos de datos sociales fallan cuando se recopila todo y se decide después. Decide primero qué pregunta vas a responder:

  • Volumen: ¿con qué frecuencia se menciona a la marca, y está cambiando eso?
  • Temas: ¿qué dice la gente, sobre qué productos o problemas?
  • Comparación: ¿cómo se comparan las menciones de la marca con las de los competidores?
  • Incidentes: ¿se está extendiendo una queja o un anuncio de producto falsificado?

Cada pregunta solo necesita unos pocos campos: el enlace de la publicación, la hora, el texto y la fuente. Pocos proyectos necesitan algo más sobre las personas que publicaron.

Elige la ruta de la fuente

FuenteMejor ruta
Plataformas con una API oficial que cubre tu necesidadLa API oficial, dentro de sus términos
Foros públicos, tablones de comunidades y sitios de reseñasRecopilación de páginas públicas
Páginas que se renderizan con JavaScriptUna API de web scraping con renderizado
Cualquier cosa detrás de un inicio de sesiónNo la recopiles

Las APIs oficiales suelen ser la ruta más fiable y claramente permitida cuando existen y se ajustan a tu volumen y presupuesto. Para páginas públicas sin una API oficial, una API de web scraping se encarga de las partes que hacen incómodos a los sitios sociales: renderizar JavaScript, esperar a que cargue el contenido y obtener páginas tal como aparecen en un país determinado. Las reglas de extracción devuelven los campos que necesitas como JSON en lugar de HTML en bruto.

Mantente en el lado público de cada sitio. El contenido detrás de un inicio de sesión, los grupos privados y los mensajes directos están fuera de los límites, tanto porque acceder a ellos normalmente implica aceptar términos que prohíben la recopilación como porque las personas implicadas esperan privacidad.

Un esquema para cada plataforma

Cada fuente nombra sus campos de forma distinta: un foro tiene un enlace permanente y un cuerpo, un sitio de reseñas tiene un enlace y un texto de reseña, y las fechas llegan en formatos y zonas horarias diferentes. Si los analizas por separado, las comparaciones se rompen. Asigna cada fuente a un único esquema pequeño a medida que recopilas:

  • source: de dónde vino la publicación;
  • url: la dirección canónica, para que la misma publicación cuente una sola vez;
  • published_at: la hora en UTC;
  • text: el texto de la publicación, con los espacios en blanco normalizados;
  • author_key: una clave pseudónima en lugar del nombre del autor.

El módulo siguiente hace esa asignación, elimina URLs duplicadas (los parámetros de seguimiento y los fragmentos a menudo hacen que una publicación parezca varias) y cuenta las menciones diarias por marca:

import hashlib
from collections import Counter
from datetime import datetime, timezone
from urllib.parse import urlsplit, urlunsplit

# Where each source keeps the fields we need, after extraction rules have run.
FIELD_MAPS = {
    "forum":  {"url": "permalink", "text": "body", "author": "username", "time": "created"},
    "review": {"url": "link", "text": "review_text", "author": "reviewer", "time": "date"},
}


def canonical(url):
    """Drop query strings and fragments so the same post counts once."""
    parts = urlsplit(url)
    return urlunsplit((parts.scheme, parts.netloc.lower(), parts.path.rstrip("/"), "", ""))


def normalise(source, raw, salt):
    """One post in a common shape, with the author pseudonymised and no other personal data."""
    m = FIELD_MAPS[source]
    when = datetime.fromisoformat(raw[m["time"]].replace("Z", "+00:00")).astimezone(timezone.utc)
    return {
        "source": source,
        "url": canonical(raw[m["url"]]),
        "published_at": when.isoformat(timespec="seconds"),
        "text": " ".join(raw[m["text"]].split()),
        "author_key": hashlib.sha256((salt + raw[m["author"]]).encode()).hexdigest()[:16],
    }


def daily_mentions(posts, brands):
    """Count posts per day that mention each brand, counting each URL once."""
    seen, counts = set(), Counter()
    for post in posts:
        if post["url"] in seen:
            continue
        seen.add(post["url"])
        day = post["published_at"][:10]
        for brand in brands:
            if brand.lower() in post["text"].lower():
                counts[(day, brand)] += 1
    return dict(sorted(counts.items()))

Aplicado a tres registros ilustrativos, uno de ellos un duplicado con un parámetro de seguimiento:

import os

from social import daily_mentions, normalise

salt = os.environ.get("MENTIONS_SALT", "rotate-me-per-project")
raw = [
    ("forum", {"permalink": "https://forum.example/t/88?ref=home", "body": "Acme kettle died after a week",
               "username": "kitchen_fan", "created": "2026-10-20T08:15:00Z"}),
    ("forum", {"permalink": "https://forum.example/t/88", "body": "Acme kettle died after a week",
               "username": "kitchen_fan", "created": "2026-10-20T08:15:00Z"}),
    ("review", {"link": "https://reviews.example/p/42", "review_text": "Better than my old Brandly one",
                "reviewer": "J. D.", "date": "2026-10-20T19:40:00+02:00"}),
]
posts = [normalise(source, item, salt) for source, item in raw]
print(daily_mentions(posts, ["Acme", "Brandly"]))
{('2026-10-20', 'Acme'): 1, ('2026-10-20', 'Brandly'): 1}

El duplicado cuenta una sola vez, la hora local de la reseña se convierte a UTC, y ningún nombre de usuario llega al resultado.

Datos personales, eliminados por diseño

Las publicaciones públicas siguen siendo datos personales en Europa y en muchos otros lugares, y las normas de protección de datos se aplican sin importar cuán pública fuera la publicación. El diseño más seguro conserva lo mínimo posible sobre las personas que la pregunta necesita:

  • Pseudonimiza a los autores. Un hash con salt permite contar publicantes distintos o detectar que una misma cuenta publica repetidamente, sin almacenar el nombre de usuario. Usa un salt distinto por proyecto y mantenlo en secreto.
  • No recopiles perfiles. El número de seguidores, las biografías, las fotos y las ubicaciones de personas rara vez son necesarios para preguntas de marca.
  • Mantén la retención corta. Los recuentos agregados y los temas se pueden conservar; el texto en bruto normalmente se puede eliminar tras el análisis.
  • Informa en conjunto. Publica tendencias y ejemplos sin identificar a las personas.

Nuestra guía sobre scraping de plataformas sociales para análisis de sentimiento cubre el lado del análisis una vez que los datos están limpios, y nuestra guía sobre seguimiento de menciones de marca online cubre la construcción del conjunto de consultas y el manejo de las diferencias regionales.

Recopila con cuidado

Los sitios sociales y de comunidades se gestionan para sus usuarios. Recopila a un ritmo al que un lector podría navegar, prefiere las páginas que listan publicaciones nuevas en lugar de rastrear archivos enteros, y deja de recopilar de cualquier fuente que te lo pida. La monitorización de marca rara vez necesita más de una pasada diaria sobre las fuentes que importan.

Preguntas frecuentes

¿Es legal recopilar datos de redes sociales?

Recopilar publicaciones públicas suele ser lícito, pero se aplican los términos de la plataforma, cómo accedes a los datos y la normativa de protección de datos. Usa APIs oficiales cuando se ajusten, mantente alejado de contenido detrás de inicios de sesión, y limita los datos personales a lo que el propósito necesita. Busca asesoramiento legal para tu caso concreto.

¿Debo usar la API de una plataforma o una API de web scraping?

Usa la API oficial cuando cubra los datos y el volumen que necesitas dentro de sus términos. Usa una API de web scraping para páginas públicas que no tienen una API adecuada, especialmente páginas que se renderizan con JavaScript.

¿Cómo evito recopilar datos personales de las redes sociales?

Recopila solo los campos que tu pregunta necesita, sustituye los nombres de usuario por claves pseudónimas con salt, omite los perfiles por completo, conserva el texto en bruto solo el tiempo necesario e informa de los resultados en conjunto.

¿Con qué frecuencia debo recopilar menciones sociales?

Una vez al día es suficiente para la mayoría de la monitorización de marca. Recopila con más frecuencia solo durante un lanzamiento o un incidente, y céntrate en las fuentes donde tu audiencia realmente publica.

En resumen

Los datos sociales son valiosos porque son lo que la gente real dice en público, y por eso mismo requieren cuidado. Decide primero la pregunta, usa APIs oficiales cuando se ajusten y una API de web scraping para páginas públicas, asigna cada fuente a un único esquema pequeño, y diseña la ausencia de datos personales desde el principio. El resultado es un conjunto de datos que responde a las preguntas de marca sin recopilar más de lo necesario.

¿Listo para empezar?

Prueba los proxies residenciales de Shifter, más de 205M IPs, más de 195 países, desde 0,75 $/GB.

Comenzar