Blog · BL-05
Por qué la recopilación de comentarios de Reddit es incompleta: no trates MoreComments como datos vacíos
Explica el árbol de comentarios de Reddit, el significado de limit en replace_more de PRAW, los marcadores de posición sin expandir y las diferencias en el conteo de comentarios, e indica cómo transmitir las brechas de recopilación, las relaciones de respuesta y el manejo de eliminaciones a los resultados del análisis.
Que la recopilación de comentarios de Reddit no devuelva errores no significa que se haya leído todo el árbol de comentarios. Al usar PRAW, MoreComments representa una posición pendiente de expandir y no un comentario con cuerpo vacío; replace_more(limit=0) elimina estos marcadores de posición en lugar de cancelar el límite en la cantidad de elementos recopilados. Este detalle basta para que una exportación aparentemente limpia omita una sección entera de la discusión.
En la discusión del hilo original en r/redditdev, PrincessYukon investigó la expansión del árbol, la estructura de respuesta y su propio error en la cabecera de autenticación para obtener los comentarios de una publicación. Lo valioso de este caso no es copiar la solicitud anterior, sino el método de depuración: verifica primero qué datos estás recibiendo antes de discutir el algoritmo de recorrido.
Este artículo contrasta la documentación de PRAW y las normas oficiales de Reddit vigentes a fecha de 2026 de 9 de 5, y analiza cómo declarar la integridad en la recopilación de datos con permisos. No se han ejecutado recopilaciones de publicaciones reales ni se describen incidentes de foros antiguos como problemas generales de la interfaz actual.
Por qué el árbol de comentarios no es un problema de «siguiente página»
Muchas interfaces de listados permiten leer páginas de forma sucesiva mediante una cadena de cursores. Sin embargo, los espacios de debate no solo contienen más comentarios en el mismo nivel, sino también respuestas más profundas dentro de un comentario específico. Si solo recorres el array superior, es probable que obtengas únicamente el inicio de cada hilo; si omites los objetos que no tienen body, tu programa ni siquiera te avisará de que hay partes sin expandir.
El tutorial de extracción de comentarios de PRAW asocia MoreComments con las opciones «cargar más comentarios» y «continuar con esta discusión» de la página. Una sola expansión también puede revelar nuevas posiciones pendientes de procesar. Por tanto, la cantidad de nodos y la cantidad de solicitudes no se pueden intercambiar directamente: procesar diez marcadores de posición no significa obtener solo diez comentarios ni cubrir diez hilos completos.
Al escribir analizadores, el primer paso consiste en diferenciar entre nodos de contenido y nodos pendientes de expansión. Una subred sin cargar es «observación pendiente» y no «nadie ha respondido». Esta distinción es fundamental en la capa de análisis: si las partes sin expandir corresponden a debates complejos, la distribución de las opiniones principales puede no representar toda la discusión.
Qué limita realmente replace_more en su parámetro limit
Según la documentación actual de PRAW, la llamada predeterminada reemplaza como máximo 32 instancias de MoreComments; limit=0 elimina los marcadores sin continuar la expansión, mientras que limit=None no establece límite en la cantidad de reemplazos, aunque sigue sujeta a otras condiciones. No son tres opciones de rendimiento similares, sino tres resultados de muestreo diferentes.
Por ejemplo, para una vista previa rápida puedes optar expresamente por no expandir y mostrar el contenido ya cargado. Se trata de una función de producto válida, siempre que el botón se denomine «vista previa de comentarios cargados» en lugar de «exportar todos los comentarios». Si necesitas un alcance mayor, puedes configurar un presupuesto de expansión acotado; al agotarse, el sistema entrega resultados parciales y registra esta decisión.
None tampoco constituye un permiso de trabajo ilimitado para sistemas de producción. La tarea requiere su propio tiempo de ejecución máximo, condiciones de parada por error y un ámbito de solicitudes autorizado. El contenido que la interfaz no devuelva o al que no se pueda acceder tampoco aparecerá automáticamente por cancelar el límite de cantidad del SDK.
También se debe registrar claramente threshold. De acuerdo con la explicación del método CommentForest, este parámetro influye en qué marcadores de posición se expanden. Si recuerdas un único parámetro para «obtenerlo todo» pero pasas por alto la otra condición de filtrado, aún puedes declarar erróneamente que el proceso ha finalizado.
Los elementos sin expandir deben conservarse y no limitarse al array final
replace_more devuelve la lista de MoreComments que no se han reemplazado. Una vez que se eliminan del árbol actual, es posible que el array final ya no muestre ningún marcador; por tanto, que la «lista final no tenga MoreComments» no demuestra por sí solo que no existan omisiones. Los elementos sin reemplazar devueltos por el método deben integrarse en los resultados de la tarea.
Aquí conviene evitar otra trampa de precisión: que existan 5 marcadores sin expandir no equivale a que falten 5 comentarios. Un marcador puede representar todo un subárbol, y continuar con su expansión podría generar nuevos marcadores. A nivel externo se puede indicar que «quedan 5 posiciones sin expandir», pero no calcular un porcentaje de integridad de manera improvisada.
Recomendamos que la tarea devuelva al menos tres grupos de información: comentarios únicos cargados, el alcance pendiente y el motivo de finalización. Las causas de detención pueden ser una selección manual de vista previa, el agotamiento del presupuesto de expansión, limitaciones de tráfico, errores de autenticación o fallos de análisis. El nombre de los campos queda a criterio de la aplicación; lo importante es que el sistema inferior distinga entre «sin resultados» y «proceso incompleto».
Si utilizas una interfaz de encapsulamiento de terceros, también debes comprobar si su «cantidad de comentarios» se refiere al total en el nivel superior, a todos los niveles cargados o al volumen recortado en una ejecución. Aunque los parámetros compartan el nombre limit, no significan lo mismo; evita aplicar la interpretación de los parámetros de PRAW a EveryInfra u otras interfaces.
Tras aplanar los datos, mantén la referencia a la respuesta de cada oración
El método list() de CommentForest permite desplegar el contenido cargado según el orden de recorrido, pero aplanar los datos no equivale a una recuperación adicional de información. Una vez que obtengas el array unidimensional, no debes desechar el identificador del comentario, la publicación asociada ni la relación con el nodo padre.
Imagina que un comentario principal afirma que «la nueva versión ya solucionó el problema» y una respuesta añade que «solo en el escritorio, en móviles todavía no». Si la exportación conserva únicamente la segunda frase, el modelo podría interpretarla como una queja independiente; si ni siquiera se recupera el comentario principal, se debe marcar una brecha de contexto en lugar de dejar que el modelo complete el texto anterior por su cuenta.
La desduplicación también debe basarse en la identidad. Si un mismo comentario aparece otra vez tras un reintento, se debe actualizar la observación actual en lugar de convertirlo en la opinión de otro usuario. Distintos comentarios con el mismo texto no deben fusionarse únicamente porque sus cadenas de caracteres coincidan. Mantén estados independientes para las ediciones del contenido, la ausencia de información del autor y la invisibilidad del nodo padre, sin reducir todo a cadenas vacías.
Estos registros solo se conservan dentro de los límites aplicables de uso y retención de datos; sugerir el mantenimiento de las relaciones no autoriza almacenar permanentemente todos los textos originales.
El recuento, los permisos y las eliminaciones forman parte del criterio de análisis
El tutorial de PRAW advierte que el valor num_comments de una publicación puede incluir elementos eliminados, suprimidos o spam, por lo que no garantiza coincidir con la cantidad de elementos extraíbles. Este recuento sirve como guía de verificación, pero no debe convertirse en un objetivo que se intente alcanzar mediante reintentos forzados.
Los permisos de recopilación deben comprobarse de forma independiente. La Data API Wiki de Reddit exige el uso de credenciales OAuth aplicables junto con un User-Agent explícito, además de enumerar las cabeceras de control de tráfico y las normas de acceso asociadas. Poder instalar PRAW no significa contar con autorización para utilizar los datos de cualquier proyecto; el código funcional de publicaciones antiguas tampoco sustituye a los requisitos de conexión actuales.
Esta misma página oficial exige gestionar el contenido eliminado en la plataforma. Para un sistema de análisis, esto implica que las eliminaciones no pueden limitarse a la tabla original: si el cuerpo del mensaje ha pasado al índice de búsqueda, a la caché u otros almacenamientos derivados, también se deben revisar los requisitos de limpieza aplicables en dichas ubicaciones. No utilices la «anonimización» como justificación para retener información que la plataforma exige eliminar.
Esto afecta al diseño de la reproducibilidad. Un objetivo más sólido consiste en preservar los métodos y criterios de tarea permitidos, en lugar de prometer la conservación permanente de cada texto observado. Las conclusiones de investigación deben especificar la fecha de recopilación y el alcance de la muestra, evitando tratar los textos históricos inaccesibles como evidencias disponibles para su revisión en cualquier momento.
Cómo validar una exportación de comentarios de Reddit
Verifica primero tres casos límite en un árbol sintético: un nodo principal con subárboles sin expandir, dos comentarios distintos con idéntico texto, y un mismo comentario que se duplica en los resultados. Una implementación correcta debe preservar el estado incompleto, conservar ambas identidades y fusionar las duplicadas respectivamente, sin fiarse de la ausencia de excepciones para confirmar el éxito.
Revisa a continuación el resultado de detención de una tarea acotada. Alcanzar el presupuesto de expansión debe considerarse un éxito parcial, el fallo de identidad un error de autenticación, y una estructura de respuesta inesperada un error de análisis. Ninguno de los tres debe devolver un array vacío. Para la clasificación general de errores, consulta la sección de gestión de errores de la API, si bien los detalles de respuesta de la plataforma se rigen siempre por la interfaz actual.
Comprueba por último la redacción del informe: de qué publicaciones proceden los resultados, por qué se seleccionaron, qué nivel de expansión se alcanzó y si existen elementos pendientes. Si solo se recopilan publicaciones populares, no se puede concluir que «los usuarios de Reddit opinan de manera general». La guía de supervisión de reputación en múltiples plataformas también separa la cobertura de recopilación de la evaluación de negocio.
Un conjunto fiable de datos de comentarios de Reddit no necesita fingir que no hay carencias. Debe hacer visibles dichas brechas, permitir la trazabilidad de las relaciones paterno-filiales y cumplir los requisitos de uso y eliminación. Así, los análisis posteriores sabrán qué conclusiones están fundamentadas y en qué puntos conviene mantener la incertidumbre.