Guía para el raspado de datos de redes sociales 2023

En esta guía, aprenderá a raspar datos de redes sociales utilizando Python, una potente herramienta para el raspado web.
11 min read
How to scrape social media

Las plataformas de redes sociales, en particular, ofrecen una gran cantidad de información que se puede utilizar en beneficio de investigaciones de mercado, análisis de la competencia, gestión de la reputación y atención al cliente. Al aprovechar estos datos mediante el raspado web, su empresa puede tomar decisiones informadas, mejorar la reputación de su marca y obtener una ventaja competitiva en el mercado.

Con el raspado web, se puede navegar eficazmente por las páginas web, seleccionar datos específicos y extraerlos en un formato estructurado, como un archivo CSV o JSON.

En esta guía, explicaremos cómo extraer datos de redes sociales de múltiples plataformas utilizando Python. Python es ampliamente reconocido como una poderosa herramienta para el raspado web debido a su amplia gama de bibliotecas que facilitan el análisis sintáctico, la extracción y el cotejo de diversos tipos de datos.  

Raspado de redes sociales con Python

Antes de empezar este tutorial, se necesitará lo siguiente:

  • Python: el lenguaje de programación utilizado para este tutorial.
  • pip: el gestor de paquetes de Python. Es útil para obtener las bibliotecas específicas de Python.
  • Beautiful Soup: un paquete útil de Python para analizar y extraer datos de archivos HTML y XML. La información sobre cómo descargarlo se puede encontrar en esta documentación.
  • Selenium: un framework para realizar operaciones en un navegador web. Es especialmente útil para simular un navegador real, lo que le permite renderizar y analizar sitios web dinámicos y con JavaScript. Se puede encontrar más información sobre cómo instalar Selenium en su documentación oficial.

En este tutorial, se configurará el entorno de Python mediante la instalación de estos paquetes y, a continuación, se ejecutarán los ejecutables de Python para raspar datos en Internet. Sin embargo, el problema es que las plataformas de redes sociales, como Facebook e Instagram, a menudo tienen bloqueadores para los bots de raspado, incluyendo requisitos para las credenciales de inicio de sesión, ocultando datos útiles detrás de botones y contenido dinámico, o utilizando JavaScript para mostrar sus datos. Se utilizará Selenium para sortear estas medidas y limitar el raspado a páginas públicas para reducir la necesidad de credenciales de inicio de sesión.

Todo el código de este tutorial está disponible en este repositorio de GitHub.

Raspado de Facebook con Python

El primer paso cuando se hace raspado web es explorar la página que se necesita analizar. Es necesario determinar con precisión qué datos se requieren, las rutas que seguirá el bot y los selectores específicos para los datos que se desean.

Por ejemplo, al ver el perfil público de Facebook de Tom Cruise, aparece información sobre él, enlaces a sus otras páginas, las publicaciones que hace publicitando sus películas y diversos medios asociados a ellas. Se puede acceder y raspar toda la información que aparece en esta página.

Para raspar el contenido de los posts de Tom Cruise, es necesario inspeccionar la página en busca de selectores que estén compartidos en los posts que te interesan:

Una vez que ha encontrado los selectores que aíslan los datos que necesita, se puede empezar a escribir el código de raspado. Se abre un archivo Python (.py) y se importan los paquetes que se van a utilizar: Selenium para acceder al contenido de tu página HTML, Beautiful Soup para analizar y extraer los datos específicos, y pandas para estructurar y limpiar el conjunto de datos final:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd

A continuación, se define la página que se desea raspar y se añaden opciones a Selenium para imitar a un usuario real y evitar que se bloquee el rastreador:


# Define the URL you want to scrape
url = 'https://www.facebook.com/officialtomcruise/'

# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Facebook page in the webdriver
driver.get(url)

Para este punto, ha extraído toda la página. Sin embargo, no está en un formato legible por humanos. Para solucionar esto, utilice Beautiful Soup, extraerá el texto que desee utilizando el selector que aisló previamente:

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

posts = soup.find_all('div', class_='x1l90r2v') 

# Extract the text content of each post
post_content = [post.text for post in posts]

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('facebook_posts.csv', index=False)

# Print the scraped data
print(data)


# Close the webdriver
driver.quit()

Una vez que haya aislado los datos que necesita, puede estructurarlos como un DataFrame (o la estructura que más le convenga). Un DataFrame es una estructura de datos comúnmente utilizada porque proporciona una vista tabular de los datos:

Raspado de Twitter con Python

Ahora que ha raspado Facebook, utilice el mismo proceso para raspar Twitter.

Explore la página de Twitter de Tom Cruise y aísle un selector que pueda utilizarse para los datos que desea:

Por ejemplo, en este ejemplo, se raspa el texto de todos los tweets. Echando un vistazo al código de la página web, hay un atributo data-testid = tweetText que se puede utilizar para extraer esto de forma eficiente.

Es importante tener en cuenta los diferentes comportamientos del sitio web que se puede encontrar. Por ejemplo, Twitter utiliza JavaScript para implementar una función de desplazamiento infinito. Esto significa que aparecen más datos a medida que se desplaza por la página y, si intenta raspar el contenido justo después de que se cargue la página, es posible que no obtenga todos los datos necesarios o que obtenga una excepción.

Para evitarlo, se puede configurar el bot para que espere un cierto tiempo antes de raspar el contenido o asegurarse de que la página se desplaza lo suficiente como para obtener todos los datos necesarios.

Vuelva a crear un archivo Python y utilice el siguiente código para raspar el contenido deseado:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
import time 

# Define the URL you want to scrape
url = 'https://twitter.com/TomCruise'

# Define the options for the Chrome webdriver to mimic a real page
options = Options()
options.add_argument('--headless')
options.add_argument("--incognito")
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
options.add_argument("--enable-javascript")

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Twitter page in the webdriver
driver.get(url)

# Wait for tweets to populate the page
try:
    WebDriverWait(driver, 60).until(expected_conditions.presence_of_element_located(
        (By.CSS_SELECTOR, '[data-testid="tweet"]')))
except WebDriverException:
    print("Something happened. No tweets loaded")

# scroll a bit for more tweets to appear
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(10)

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

posts = soup.find_all(attrs={"data-testid": "tweetText"})

# Extract the text content of each post
post_content = [post.text for post in posts]

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_content': post_content})
data.to_csv('twitter_posts.csv', index=False)

# Print the scraped data
print(data)

# Close the webdriver
driver.quit()

Raspado de Instagram con Python

Por último, eche un vistazo a cómo puede raspar Instagram.

La página de Instagram de Tom Cruise se presenta como una galería multimedia con sólo fotos y vídeos disponibles si no se ha iniciado sesión. Sin embargo, la exploración de la página muestra que el texto alternativo de los medios de comunicación, en la mayoría de los casos, tiene el contenido del post también. Esto significa que puede raspar las URL de los archivos multimedia y sus descripciones alternativas directamente desde esta página:

Para ello, sólo tiene que encontrar los selectores para sus datos y estructurar el DataFrame para recoger sus datos:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import pandas as pd
# Define the URL you want to scrape
url = 'https://www.instagram.com/tomcruise'

# Define the options for the Chrome webdriver
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')

# Create a new instance of the Chrome webdriver with the defined options
driver = webdriver.Chrome(options=options)

# Load the Instagram page in the webdriver
driver.get(url)

# Extract the HTML content of the page using BeautifulSoup
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'html.parser')

# Collect instagram links
links = soup.find_all('a', href= True) 

# Limit the collected links to posts data

posts = []
for i in links :
    if '/p/' in i:
        posts.append(i)

# Save the scraped data in a CSV file
data = pd.DataFrame({'post_links': posts})
data.to_csv('instagram_posts.csv', index=False)

# Print the scraped data
print(data)

# Close the webdriver
driver.quit()

Raspado web de redes sociales con Bright Data

El raspado web puede ser un proceso largo y tedioso, pero no tiene por qué serlo.

Bright Data es una plataforma web que permite a las empresas acceder fácilmente a cantidades masivas de datos estructurados disponibles públicamente en la web. Estos datos curados están disponibles en forma de conjuntos de datos de redes sociales. Estos conjuntos de datos contienen una plétora de datos, incluidos perfiles de usuario, publicaciones y comentarios, a los que puede acceder sin tener que raspar los datos usted mismo.  

Además, si desea recuperar datos de otro lugar, las herramientas del IDE Web Scraper y Web Unlocker de Bright Data pueden ayudarle. Vienen con plantillas prediseñadas para reducir la cantidad de código que necesita escribir, y cuentan con proxies integrados que le ayudarán a acceder a contenido bloqueado por región y a resolver CAPTCHAs por el camino.  

Utilizar Bright Data para el raspado de datos de redes sociales puede ser una opción más eficaz y fiable que hacer el raspado usted mismo. Además, Bright Data proporciona una amplia red de proxies que le permite eludir las restricciones de tarifas y evitar los bloqueos de IP al raspar plataformas de redes sociales.  

Conclusión  

En este artículo, aprendió los fundamentos del raspado web y descubrió cómo aprovechar Python para extraer datos de redes sociales de plataformas como Facebook, Twitter e Instagram. También examinamos los factores importantes a considerar cuando se raspan manualmente sitios web de redes sociales y exploramos Bright Data como una solución para el raspado web, particularmente para la extracción de datos de redes sociales.

El raspado web puede recopilar datos de redes sociales para la investigación de marketing, el análisis de sentimiento y el análisis de tendencias. Sin embargo, debe utilizar el raspado web de forma ética y respetar las condiciones de servicio de los sitios web y las redes sociales que raspe. Asegúrese de que los datos que está raspando son públicos y no violan las leyes de privacidad. Las herramientas que ofrece Bright Data son especialmente útiles, ya que le ayudan a navegar por los problemas legales y éticos que conlleva el raspado de datos.

More from Bright Data

Datasets Icon
Get immediately structured data
Access reliable public web data for any use case. The datasets can be downloaded or delivered in a variety of formats. Subscribe to get fresh records of your preferred dataset based on a pre-defined schedule.
Web scraper IDE Icon
Build reliable web scrapers. Fast.
Build scrapers in a cloud environment with code templates and functions that speed up the development. This solution is based on Bright Data’s Web Unlocker and proxy infrastructure making it easy to scale and never get blocked.
Web Unlocker Icon
Implement an automated unlocking solution
Boost the unblocking process with fingerprint management, CAPTCHA-solving, and IP rotation. Any scraper, written in any language, can integrate it via a regular proxy interface.

Ready to get started?