Información de Stack Overflow
Alberto Madin Rivera
Posted on May 6, 2024
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)
💖 💪 🙅 🚩
Alberto Madin Rivera
Posted on May 6, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.