Cómo scrapear Reddit con Python

Cómo hacerlo, Python, Scraping, Nov-15-20225 minutos de lectura

La gente puede recopilar y raspar fácilmente información de múltiples fuentes como Facebook, Reddit y Twitter. Se puede pensar en un scraper como una herramienta especializada que extrae datos de una página web con precisión y rapidez. Las API de scraping ayudan a los scrapers a evitar ser baneados por las técnicas anti-scraping que colocan los sitios web. Sin embargo

Índice

La gente puede recopilar y raspar fácilmente información de múltiples fuentes como Facebook, Reddit y Twitter. Se puede pensar en un scraper como una herramienta especializada que extrae datos de una página web con precisión y rapidez. Las API de scraping ayudan a los scrapers a evitar ser baneados por las técnicas anti-scraping que colocan los sitios web. Sin embargo, es caro utilizar las API en comparación con una herramienta proxy gestionada por uno mismo.

¿Ha utilizado Reddit? Si eres un investigador social y pasas mucho tiempo en Internet, lo más probable es que hayas oído hablar de Reddit. Reddit se autodenomina "la portada de Internet". Es un foro de debate en línea donde la gente comparte contenidos y noticias o comenta las publicaciones de otras personas. Por lo tanto, es una increíble fuente de datos para los profesionales del marketing en Internet y los investigadores sociales. 

Reddit tiene una API llamada Python Reddit API Wrapper, abreviada como PRAW, para rastrear datos. En este blog, voy a mostrar los pasos sobre cómo raspar Reddit utilizando Python. Pero antes de eso, usted necesita saber por qué usted tiene que raspar Reddit.

¿Por qué es necesario scrapear Reddit?

Si hablamos del diseño de Reddit, entonces está dividido en varias comunidades conocidas como "subreddits". Puedes encontrar cualquier subreddit de tu tema de interés en Internet. Los investigadores sociales realizan análisis, hacen inferencias y ponen en marcha planes de acción cuando extraen los debates de Reddit sobre un tema concreto. 

Puedes extraer muchos datos de Reddit, por ejemplo:

  • Enlaces
  • Comentarios
  • Imágenes
  • Lista de subreddits
  • Propuestas para cada subreddit
  • Nombres de usuario
  • Votos a favor
  • Votos en contra

Puedes scrapear cualquier información de Reddit relevante para tu negocio por las siguientes necesidades:

  • Para crear aplicaciones de PNL
  • Para conocer la opinión de los clientes
  • Para estar al tanto de las tendencias del mercado
  • Para la investigación de los consumidores
  • Para controlar el impacto de sus campañas de marketing

Por ejemplo, 

  • Una marca de moda necesita analizar todos los textos de los comentarios, títulos, enlaces, imágenes y pies de foto de los subreddits de moda para: Idear la estrategia de precios adecuadaIdentificar las tendencias de colorDescubrir los puntos débiles de los fashionistas con varias marcas
  • Diseñar la estrategia de precios adecuada
  • Identificar las tendencias de color
  • Descubrir los puntos débiles de los fashionistas con varias marcas
  • Los profesionales del periodismo y las noticias tienen que raspar entradas de autores con enlaces a blogs para entrenar algoritmos de aprendizaje automático para el resumen automático de textos.
  • Las empresas de inversión y comercio tienen que rascar subreddits relacionados con la "bolsa" para idear un plan de inversión interpretando de qué valores se está hablando.

Desafíos del scraping de Reddit

Reddit scraping utiliza web scrapers (programas informáticos) para extraer datos disponibles públicamente del sitio web de Reddit. Es necesario utilizar los raspadores de Reddit debido a las limitaciones a las que se enfrenta al utilizar la API oficial de Reddit. Sin embargo, si utiliza el raspador web que no utiliza la API de Reddit para extraer datos de Reddit, violará las condiciones de uso de Reddit. Pero esto no significa que el web scraping sea ilegal.

Para tener una sesión de scraping sin problemas, tendrás que evadir los sistemas anti-scraping puestos en marcha por Reddit. Las técnicas anti-scraping más comunes utilizadas por Reddit son:

  • Seguimiento IP
  • Captchas

Puede resolver el problema del rastreo de IP con la ayuda de proxies y rotación de IP. Por otro lado, puede resolver el problema de Captchas utilizando Captcha solves como 2Captcha.

Cómo scrapear Reddit con Python

Hay cinco formas de scrapear Reddit, y son:

  • Scraping manual - Es el método más sencillo pero menos eficaz en términos de velocidad y coste. Sin embargo, arroja datos de gran consistencia.
  • Uso de la API de Reddit - Se necesitan conocimientos básicos de codificación para raspar Reddit utilizando la API de Reddit. Proporciona los datos, pero limita el número de mensajes en cualquier hilo Reddit a 1000.
  • API de terceros recubiertas de azúcar: es un enfoque eficaz y escalable, pero no rentable.
  • Herramientas de Web Scraping - Estas herramientas son escalables y sólo requieren conocimientos básicos de uso del ratón.
  • Scripts de scraping personalizados - Son altamente personalizables y escalables pero requieren un alto calibre de programación.

Veamos cómo podemos scrapear Reddit utilizando la API de Reddit con la ayuda de los siguientes pasos.

Crear una cuenta API de Reddit

Es necesario crear una cuenta Reddit antes de seguir adelante. Para utilizar PRAW, debe registrarse en la API de Reddit siguiendo este enlace.

Importar paquetes y módulos

En primer lugar, importaremos los módulos incorporados de Pandas, es decir, datetime, y dos módulos de terceros, PRAW y Pandas, como se muestra a continuación:

importar praw
import pandas como pd
import datetime como dt

Obtener instancias de Reddit y subreddit

Puedes acceder a los datos de Reddit usando Praw, que significa Python Reddit API Wrapper. Primero, necesitas conectarte a Reddit llamando a la función praw.Reddit y almacenándola en una variable. Después, tienes que pasar los siguientes argumentos a la función.

reddit = praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                    client_secret='SECRET_KEY_27_CHARS ', \
                    user_agent='TU_NOMBRE_APP', \
                    nombre_usuario='YOUR_REDDIT_USER_NAME', \
                    contraseña='YOUR_REDDIT_LOGIN_PASSWORD')

Ahora, puedes obtener el subreddit de tu elección. Para ello, llama a la instancia .subreddit de reddit (variable), y pasa el nombre del subreddit al que quieres acceder. Por ejemplo, puedes usar el subreddit r/Nootropics.

subreddit = reddit.subreddit('Nootrópicos')

Acceder a los hilos

Cada subreddit tiene las siguientes cinco formas diferentes de organizar los temas creados por los Redditors:

  • .nuevo
  • .caliente
  • .polémico
  • .dorado
  • .top

Puedes coger los temas más votados como:

top_subreddit = subreddit.top()

Obtendrá un objeto en forma de lista con los 100 mejores envíos en r/Nootropics. Sin embargo, el límite de peticiones de Reddit es 1000, por lo que puedes controlar el tamaño de la muestra pasando un límite a .top as:

top_subreddit = subreddit.top(limit=600)

Analizar y descargar los datos

Puedes raspar los datos que quieras. Sin embargo, vamos a raspar la siguiente información sobre los temas:

  • id
  • título
  • puntuación
  • fecha de creación
  • cuerpo del texto

Para ello, almacenaremos los datos en un diccionario y utilizaremos un bucle for como se muestra a continuación.

topics_dict = { "title":[], \
                "score":[], \
                "id":[], "url":[], \
                "created": [], \
                "body":[]}

Ahora podemos extraer los datos de la API de Reddit. Añadiremos la información a nuestro diccionario iterando a través de nuestro objeto top_subreddit.

for envío in top_subreddit:
    topics_dict["id"].append(envío.id)
    topics_dict["título"].append(envío.título)
    topics_dict["puntuación"].append(puntuación.envío)
    topics_dict["creado"].append(envío.creado)
    topics_dict["cuerpo"].append(envío.autotexto)

Ahora, ponemos nuestros datos en Pandas Dataframes ya que los diccionarios de Python no son fáciles de leer.

topics_data = pd.DataFrame(topics_dict)

Exportar CSV

Es muy fácil crear ficheros de datos en varios formatos en Pandas, así que usamos las siguientes líneas de código para exportar nuestros datos a un fichero CSV.

topics_data.to_csv('FILENAME.csv', index=False)

Los mejores proxies de Reddit de 2021

Ya sabes que Reddit no es un sitio muy estricto en cuanto a las restricciones de uso de proxies. Pero puedes ser atrapado y penalizado si automatizas tus acciones en Reddit sin usar proxies. 

Así pues, veamos algunos de los mejores proxies para Reddit que se dividen en dos categorías:

Proxies residenciales: son las direcciones IP que el proveedor de servicios de Internet (ISP) asigna a un dispositivo en una ubicación física concreta. Estos proxies revelan la ubicación real del dispositivo que el usuario utiliza para iniciar sesión en un sitio web.

Proxies de centro de datos - Se trata de varias direcciones IP que no proceden de ningún proveedor de servicios de Internet. Las adquirimos de un proveedor de servicios en la nube.

Estos son algunos de los mejores proxies residenciales y de centros de datos para Reddit.

Smartproxy

Smartproxy es uno de los mejores proveedores de proxy residencial premium, ya que es eficaz para la automatización de Reddit. Tiene un amplio grupo de IPs y proporciona acceso a todas las IPs una vez que te suscribes a su servicio. 

Stormproxy

Los precios y el ancho de banda ilimitado de Stormproxies los convierten en una buena opción. Son asequibles y baratos de usar. Tienen proxies para varios casos de uso y proporcionan los mejores proxies residenciales para la automatización de Reddit.

ProxyScrape

ProxyScrape es uno de los proveedores de servicios proxy más populares que se centra en ofrecer proxies para scraping. También ofrece proxies de centros de datos dedicados junto con proxies de centros de datos compartidos. Cuenta con más de 40.000 proxies de centros de datos que puede utilizar para raspar datos de sitios web en Internet.

ProxyScrape ofrece tres tipos de servicios a sus usuarios, 

Highproxies

Highproxies trabaja con Reddit y tiene las siguientes categorías de proxies:

  • Proxies compartidos
  • Apoderados privados
  • Proxies de sitios clasificados
  • Proxy de venta de entradas
  • Proxy multimedia

Instantproxies

También puede utilizar Instantproxies para la automatización de Reddit, ya que son muy seguros, fiables, rápidos y tienen un tiempo de actividad de alrededor del 99,9 por ciento. Son los más baratos de todos los proxies de centros de datos.

¿Por qué usar proxies de Reddit?

Necesitas proxies cuando trabajas con algunas herramientas automáticas en Reddit. Esto se debe a que Reddit es un sitio web muy sensible que detecta fácilmente las acciones automáticas y bloquea tu IP de acceso a la plataforma. Por lo tanto, si estás automatizando algunas de las tareas como votos, posts, unirte/desunirte de grupos, y gestionar más de una cuenta, definitivamente necesitas usar proxies para evitar malos resultados.

Soluciones alternativas a Scrape Reddit

Puede optar por el scraping manual si sus requisitos de scraping de Reddit son pequeños. Pero si los requisitos son grandes, debe aprovechar las metodologías de raspado automatizadas, como las herramientas de raspado web y las secuencias de comandos personalizadas. Los raspadores web demuestran ser rentables y eficientes en cuanto a recursos cuando sus requisitos diarios de raspado no superan unos pocos millones de publicaciones.

Por lo tanto, echemos un vistazo a algunos de los mejores raspadores de Reddit como la mejor solución para raspar grandes cantidades de datos de Reddit.

Scrapestrom

Scrapestorm es una de las mejores herramientas de scraping disponibles en el mercado ya que funciona bastante bien cuando se trata de scrapear Reddit. Hace uso de la inteligencia artificial para identificar los puntos de datos clave en la página web de forma automática.

Reddit Scraper de Apify

El Reddit scraper de Apify te facilita la extracción de datos sin utilizar la API de Reddit. Significa que no necesitas un token de API de desarrollador ni autorización de Reddit para descargar los datos para uso comercial. También puedes optimizar tu scraping utilizando el servicio proxy integrado de la plataforma Apify. 

Conclusión

Hemos discutido cinco maneras de scrapear datos de Reddit, y la más fácil es utilizar la API de Reddit porque sólo requiere conocimientos básicos de codificación. PRAW es una envoltura de Python para la API de Reddit que le permite utilizar una API de Reddit con una interfaz limpia de Python. Pero cuando usted tiene grandes necesidades de raspado de Reddit, puede extraer los datos disponibles públicamente desde el sitio web de Reddit con la ayuda de los raspadores de Reddit. Para automatizar sus acciones en el sitio web de Reddit, necesita utilizar un centro de datos o proxies residenciales.