DEV Community

Cover image for Web scraping para extraer información utilizando requests y BeautifulSoup en Python
Albert Gil López
Albert Gil López

Posted on

Web scraping para extraer información utilizando requests y BeautifulSoup en Python

Introducción

En el mundo de la programación, el scraping web se ha convertido en una técnica esencial para extraer información útil de sitios web. En esta guía, voy a explorar contigo cómo implementar scraping web utilizando Python, específicamente con las bibliotecas requests y BeautifulSoup mediante un caso práctico: extraer datos de un directorio de empresas y comercios del Ayuntamiento de Gelida (Barcelona).

Background

¿Qué es el Scraping Web?
El scraping web es el proceso de recopilar datos estructurados de sitios web de manera automatizada. Es ampliamente utilizado en la recopilación de datos, el análisis competitivo, la investigación de mercado, entre otros.

Herramientas Utilizadas

  • Python: Un lenguaje de programación versátil y fácil de aprender.

  • Requests: Una biblioteca de Python para realizar peticiones HTTP de manera sencilla.

  • BeautifulSoup: Una biblioteca que facilita el análisis de documentos HTML y XML, permitiendo extraer datos de manera eficiente.

Hands On:

El script de Python realiza scraping del directorio web de comercios y empresas del pueblo de Gelida (Barcelona) y extrae información relevante. Aquí está el código completo:

import requests
from bs4 import BeautifulSoup

def scrape_directory(url, page_number):
    # Modificar la URL para incluir el número de página
    page_url = f"{url}?pag={page_number}"
    response = requests.get(page_url)
    soup = BeautifulSoup(response.text, 'html.parser')

    comercios = []

    ul = soup.find("ul", class_="clear articlelist default")
    if ul:
        for li in ul.find_all("li"):
            tpl_default = li.find("div", class_="tplDefault")
            if tpl_default:
                subtitle_element = tpl_default.find("a", class_="subtitle")
                if subtitle_element:
                    comercio_info = subtitle_element.text.strip()
                    comercios.append({
                        "info": comercio_info
                    })

    return comercios

# URL base del directorio
base_url = "https://www.gelida.cat/el-municipi/empreses-i-comercos"

# Número total de páginas a recorrer
total_pages = 7

# Recorrer todas las páginas y extraer la información
all_comercios = []
for page in range(1, total_pages + 1):
    comercios = scrape_directory(base_url, page)
    all_comercios.extend(comercios)

contador = 0

# Imprimir los resultados para verificar
for comercio in all_comercios:
    print(comercio)
    contador += 1

print(f"En total hay {contador} comercios")

Enter fullscreen mode Exit fullscreen mode

El script se divide en varias partes clave:

1.Importación de Bibliotecas: Se incluyen las bibliotecas necesarias para el proceso de scraping.

import requests
from bs4 import BeautifulSoup
Enter fullscreen mode Exit fullscreen mode

2.Definición de la Función scrape_directory:

  • Parámetros: url (URL del directorio), page_number (número de página a analizar).

  • Proceso: Modifica la URL, usa requests para una petición HTTP, y analiza el contenido HTML para extraer datos utilizando BeautifulSoup.

def scrape_directory(url, page_number):
    page_url = f"{url}?pag={page_number}"
    response = requests.get(page_url)
    soup = BeautifulSoup(response.text, 'html.parser')
Enter fullscreen mode Exit fullscreen mode

3.Bucle para Recorrer Páginas:

  • Se define la URL base y el número total de páginas.
  • Se itera sobre cada página, extrayendo y acumulando la información de los comercios.

Web scraping para extraer información utilizando requests y BeautifulSoup en Python - Albert Gil López

comercios = []

    ul = soup.find("ul", class_="clear articlelist default")
    if ul:
        for li in ul.find_all("li"):
            tpl_default = li.find("div", class_="tplDefault")
            if tpl_default:
                subtitle_element = tpl_default.find("a", class_="subtitle")
                if subtitle_element:
                    comercio_info = subtitle_element.text.strip()
                    comercios.append({
                        "info": comercio_info
                    })

    return comercios
Enter fullscreen mode Exit fullscreen mode

En nuestro directorio, si inspeccionamos los elementos de la web tenemos que buscar un ul con una clase específica. Luego iteramos sobre cada li para extraer datos de los comercios y almacenamos la información en una lista.

Ejecución y Resultados

  • El script se ejecuta para recorrer el número total de páginas especificadas, recopilando datos de cada comercio.
  • Al final, se imprime la información recopilada y se muestra el número total de comercios encontrados.
# URL base del directorio
base_url = "https://www.gelida.cat/el-municipi/empreses-i-comercos"

# Número total de páginas a recorrer
total_pages = 7

# Recorrer todas las páginas y extraer la información
all_comercios = []
for page in range(1, total_pages + 1):
    comercios = scrape_directory(base_url, page)
    all_comercios.extend(comercios)

contador = 0

# Imprimir los resultados para verificar
for comercio in all_comercios:
    print(comercio)
    contador += 1

print(f"En total hay {contador} comercios")
Enter fullscreen mode Exit fullscreen mode

Conclusión

El ejemplo proporcionado muestra el poder y la flexibilidad de Python para el scraping web. Mediante requests y BeautifulSoup, podemos acceder y extraer datos de sitios web de manera eficiente. Este conocimiento abre puertas a numerosas aplicaciones en diversos campos como el análisis de datos, el marketing digital y mucho más. Es importante recordar siempre respetar las políticas de uso de los sitios web y las leyes de protección de datos al realizar scraping.

What's Next, próximos pasos:

Comparte tu experiencia:
Estoy abierto a colaborar y discutir sobre las posibilidades que ofrece la inteligencia artificial y cómo trabajar juntos para explorar y construir soluciones innovadoras. Si tienes ideas, preguntas o simplemente quieres hablar de ello, escríbeme:

GitHub: https://github.com/albertgilopez
LinkedIn: https://www.linkedin.com/in/albertgilopez/
Inteligencia Artificial Generativa en español: https://www.codigollm.es/

Top comments (0)