DEV Community

Alberto Madin Rivera
Alberto Madin Rivera

Posted on

Información de Stack Overflow

Este código está destinado a extraer información de la página de preguntas Stack Overflow y almacenarla en un archivo de Texto.

Importando las bibliotecas necesarias: request para hacer las solicitudes HTTP, BeautifulSoup de bs4 para analizar HTML y pandas para manejar los datos en forma de Dataframe.

import requests
from bs4 import BeautifulSoup
import pandas as pd

# User agent para protegernos de baneos
headers = {
    "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/71.0.3578.80 Chrome/71.0.3578.80 Safari/537.36"
}

# URL Semilla
url = "https://stackoverflow.com/questions"

# Requerimiento al servidor
respuesta = requests.get(url, headers=headers)

# Paseo del arbol con beautifulsoup
soup = BeautifulSoup(respuesta.text)
# Encontramos elemento por ID
contenedor_de_preguntas = soup.find(id = "questions")
# Encontrar varios elemntos por tag y por clase
lista_de_preguntas = contenedor_de_preguntas.find_all("div", class_ = "s-post-summary")

# Crear una lista para almacenar los datos
datos = []

# Iteramos elemnto por elemento
for pregunta in lista_de_preguntas:

    # MÉTODO 1: Método tradicional
    # Dentro de cada elemento iterado encontrar un tag
    texto_pregunta = pregunta.find("h3").text 
    # Encontrar por clase
    descripcion_preguntas = pregunta.find(class_='s-post-summary--content-excerpt').text
    # Limpieza de texto
    descripcion_preguntas = descripcion_preguntas.replace("\n", "").replace("\r", "")
    print(texto_pregunta)
    print(descripcion_preguntas)
    print()

    # Agregar los datos a la lista
    datos.append([texto_pregunta, descripcion_preguntas])

# Agregar un DataFrame con los datos
df = pd.DataFrame(datos, columns=["Pregunta", "Descripcion"])

# Guardar el Dataframe como un archivo de texto txt
df.to_csv("preguntas_stackoverflow.txt", sep="\t",
          index=False)

# Imprimir el dataframe
print(df)
Enter fullscreen mode Exit fullscreen mode

Top comments (0)