Saltar al contenido
Webscrapping con Python

Extracción de información de sitios web estáticos

Introducción

El web scraping es una técnica muy útil para extraer información de sitios web estáticos. Los sitios web estáticos son aquellos que no cambian o se actualizan de manera frecuente. Para extraer esta información, se utiliza un programa o script que se comunica con el servidor web y recopila los datos de la página web en formato legible por la máquina, como HTML o XML.

Para realizar web scraping con Python, se utilizan varias herramientas y bibliotecas, como Requests, Beautiful Soup y Pandas. La biblioteca Requests permite obtener la respuesta HTTP del servidor web y almacena el contenido HTML de la página web. Beautiful Soup se utiliza para analizar el contenido HTML y extraer la información requerida utilizando los selectores CSS o XPATH. Finalmente, Pandas permite guardar los datos extraídos en un formato tabular, como un archivo CSV o Excel.

El web scraping se utiliza en una variedad de aplicaciones, como análisis de precios, seguimiento de noticias, monitoreo de redes sociales y análisis de datos de investigación. Sin embargo, es importante tener en cuenta que el web scraping no siempre es legal, ya que algunos sitios web pueden tener términos de servicio que prohíben la recopilación de sus datos.

Resumen

La extracción de información de sitios web estáticos es un proceso mediante el cual se utiliza el lenguaje de programación Python para automatizar el proceso de recolección de datos de una página web. Esta técnica se utiliza para extraer información útil de una página web, sin necesidad de copiar y pegar la información manualmente. Existen varios módulos de Python que se pueden utilizar para extraer información de sitios web estáticos, algunos de ellos son Requests, BeautifulSoup y Scrapy.

En términos generales, el proceso de extracción de información de sitios web estáticos con Python se divide en los siguientes pasos:

  1. Descarga de la página web: Para descargar la página web se utiliza el módulo de Python Requests, que permite realizar solicitudes HTTP para descargar la página web.

  2. Análisis de la página web: Para analizar la página web se utiliza el módulo de Python BeautifulSoup, que permite analizar la estructura HTML de la página web y extraer la información relevante.

  3. Extracción de la información: Una vez que se ha analizado la página web con BeautifulSoup, se puede extraer la información relevante, como texto, imágenes, enlaces, etc.

  4. Almacenamiento de la información: La información extraída se puede almacenar en diferentes formatos, como CSV, JSON, etc.

Es importante mencionar que la extracción de información de sitios web estáticos solo es legal si la información que se extrae es de acceso público. Además, es recomendable revisar los términos y condiciones del sitio web antes de realizar cualquier tipo de extracción de información.

Aplicación teórica

Por supuesto, te daré un ejemplo práctico para la extracción de información de sitios web estáticos.

Supongamos que deseamos extraer información de la página web "https://www.imdb.com/chart/top", en la cual se encuentran listadas las películas mejor valoradas por votantes registrados en el sitio de IMDb, a través del uso de Web Scraping con Python.

Primero, necesitamos importar algunas librerías de Python, como requests y BeautifulSoup. Luego, realizamos una solicitud HTTP al sitio web, utilizando el método GET de la librería requests. Después, pasamos la respuesta al constructor de la clase BeautifulSoup, que nos permitirá acceder al contenido HTML de la página web. A continuación, podemos buscar los elementos HTML que contienen los datos que deseamos extraer. En este caso, deseamos extraer el ranking (posición), el título, el año de lanzamiento y la calificación de cada película. Utilizamos funciones de BeautifulSoup como find() y find_all() para encontrar estos elementos HTML dentro del código fuente de la página web.

Finalmente, realizamos un loop para recorrer todos los títulos de las películas extraídas y guardamos la información como un archivo CSV para su posterior análisis.

import requests
from bs4 import BeautifulSoup
import csv

# Hacemos la solicitud HTTP
url = 'https://www.imdb.com/chart/top'
response = requests.get(url)

# Analizamos el contenido HTML
soup = BeautifulSoup(response.content, 'html.parser')

# Buscamos los elementos que contienen los datos que queremos extraer
movies = soup.find_all('td', class_='titleColumn')
ratings = soup.find_all('td', class_='ratingColumn imdbRating')

# Creamos la lista de las películas
movies_list = []
for i in range(len(movies)):
    title = movies[i].find('a').get_text().strip()
    year = movies[i].find('span', class_='secondaryInfo').get_text().strip('()')
    rating = ratings[i].find('strong').get_text().strip()
    row = [i+1, title, year, rating]
    movies_list.append(row)

# Guardamos los datos como un archivo CSV
with open('top_movies.csv', mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Ranking','Título','Año','Calificación'])
    for movie in movies_list:
        writer.writerow(movie)

Este es un ejemplo práctico de cómo se puede extraer información de un sitio web estático utilizando Python y Web Scraping. Con esta información, podemos realizar posteriormente análisis de datos y estadísticos para obtener conclusiones interesantes.

Aplicación práctica

Un ejemplo práctico de cómo extraer información de un sitio web estático utilizando Python y la biblioteca BeautifulSoup:

Supongamos que queremos extraer la lista de países del mundo de la página web https://www.worldometers.info/geography/how-many-countries-are-there-in-the-world/. Primero, instalamos beautifulsoup4 usando pip:

pip install beautifulsoup4

Luego, importamos las bibliotecas necesarias y hacemos una solicitud HTTP a la página web:

import requests
from bs4 import BeautifulSoup

url = 'https://www.worldometers.info/geography/how-many-countries-are-there-in-the-world/'
response = requests.get(url)

A continuación, usamos BeautifulSoup para analizar el código HTML de la página web y extraer la información que deseamos:

soup = BeautifulSoup(response.content, 'html.parser')
countries_table = soup.find('table', attrs={'id': 'example2'})
countries = []

for row in countries_table.find_all('tr'):
    cols = row.find_all('td')
    if len(cols) > 0:
        country_name = cols[0].get_text().strip()
        countries.append(country_name)

print(countries)

En este código, utilizamos el método find() para encontrar la tabla que contiene la información de los países (identificada por el atributo id="example2"), y luego iteramos sobre todas las filas de la tabla utilizando el método find_all('tr'). Para cada fila, extraemos el texto de la primera celda utilizando el método get_text(), y lo agregamos a la lista countries. Finalmente, imprimimos la lista de países extraídos.

¡Espero que te haya resultado útil este ejemplo!