CORE Code School

Web Scraping en Python

13 minutos

¿Qué es Web Scraping?

Web Scraping es una técnica utilizada para extraer datos de páginas web. Esta técnica se basa en analizar el código HTML de una página web y extraer la información relevante para nuestro uso.

¿Por qué utilizar Web Scraping?

Web Scraping es una técnica muy útil en diversas áreas. Algunas de las aplicaciones más comunes son:

  • Análisis de precios: Puedes utilizar Web Scraping para obtener información sobre los precios de un producto en diferentes tiendas en línea.
  • Minería de datos: Puedes utilizar Web Scraping para obtener información de redes sociales, noticias, entre otros.
  • Investigación académica: Puedes utilizar Web Scraping para recopilar información de diferentes sitios web que te ayuden a desarrollar tus investigaciones.

¿Qué necesitamos para comenzar con Web Scraping en Python?

Para comenzar con Web Scraping en Python, necesitamos algunas bibliotecas que nos ayudarán a analizar el código HTML de las páginas web. Las bibliotecas más utilizadas son:

  • BeautifulSoup: Es una biblioteca que nos ayuda a analizar el código HTML de una página web y extraer información de ella.

  • Requests: Es una biblioteca que nos ayuda a hacer solicitudes HTTP a una página web para obtener su contenido.

¿Cómo podemos utilizar estas bibliotecas en Python?

Primero, debemos instalar las bibliotecas utilizando pip. Para instalar BeautifulSoup y Requests, puedes utilizar el siguiente comando en tu terminal:

bash
pip install beautifulsoup4 requests

Una vez que tengamos las bibliotecas instaladas, podemos utilizarlas en nuestro código.

Ejemplo real de Web Scraping

A continuación, te mostraré un ejemplo de cómo puedes utilizar Web Scraping para obtener diferente información de una página web.

Vamos a utilizar como ejemplo la pagina de la BBC News, para extraer los titulos, enlaces y descripciones de cada noticia.

python
import requests
from bs4 import BeautifulSoup

# URL de la BBC News
url = 'https://www.bbc.com/news'

# Hacemos una petición HTTP a la página web
response = requests.get(url)

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

# Buscamos los elementos HTML que contienen los titulares de noticias
titulares = soup.find_all('h3', class_='gs-c-promo-heading__title')

# Extraemos y mostramos los titulares de noticias obtenidos
for titular in titulares:
    print(titular.text.strip())
    print('---')

Ahora, si queremos obtener los enlaces a las noticias podriamos realizar lo siguiente:

python
import requests
from bs4 import BeautifulSoup

# URL de la BBC News
url = 'https://www.bbc.com/news'

# Hacemos una petición HTTP a la página web
response = requests.get(url)

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

# Buscamos los elementos HTML que contienen los enlaces de noticias
enlaces = soup.find_all('a', class_='gs-c-promo-heading')

# Extraemos y mostramos los enlaces de noticias obtenidos
for enlace in enlaces:
    print(enlace['href'])
    print('---')

Y para las descripciones algo muy parecido, lo haremos de la siguiente manera:

python
import requests
from bs4 import BeautifulSoup

# URL de la BBC News
url = 'https://www.bbc.com/news'

# Hacemos una petición HTTP a la página web
response = requests.get(url)

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

# Buscamos los elementos HTML que contienen las descripciones de noticias
descripciones = soup.find_all('p', class_='gs-c-promo-summary')

# Extraemos y mostramos las descripciones de noticias obtenidas
for descripcion in descripciones:
    print(descripcion.text.strip())
    print('---')

De esta manera habremos hecho un sencillo Web Scraping para obtener titulos, enlaces y descripciones de noticias, con esta información podemos realizar diferentes acciones tales como guardar los enlaces en una base de datos de noticias, ect.

Ahora, vamos a explicar un poco que hemos trabajado hace un momento, todo se mueve entorno a una libreria llamada BeautifulSoup, y a parsear el contenido HTML utilizandola, ¿Qué estamos haciendo?

¿Qué es BeautifulSoup?

BeautifulSoup es una biblioteca que nos permite extraer información de páginas web.

Usamos comandos de BeautifulSoup para crear un objeto de datos bien estructurado del cual podemos extraer, los elementos que deseamos.

Es vital entender que muchos de los comandos de BeautifulSoup trabajan con un objeto, el cual no es lo mismo que una cadena de texto simple.

Cuando extraes información de un objeto con un comando de BeautifulSoup, a veces obtienes un solo objeto Tag, y a veces obtienes una lista de objetos Tag en Python (similar a un arreglo en JavaScript). La forma en que tratas esa información extraída será diferente dependiendo de si es un solo elemento o una lista (que usualmente, pero no siempre, contiene más de un elemento).

¡Ese último párrafo es REALMENTE IMPORTANTE! Por ejemplo, no puedes llamar a .text en una lista. Obtendrás un error si lo intentas.