Tutoriales

Como hacer scraping con Python y Beautiful Soup

Beautiful Soup es una librería opensource de Python muy popular que se utiliza para el web scraping. La combinación del lenguaje Python con esta librería se convierte en una de las mejores herramienta para extraer información de páginas web.

En este artículo se pretende mejorar tus habilidades de web scraping utilizando la librería Beautiful Soup. A partir de ejercicios para principiantes usando la web que hemos preparado ParaScrapear.com. Te enseñaré cómo utilizar Python para rastrear la web y generar un CSV con los datos extraídos.

Conceptos básicos de un documento HTML

Antes de meternos de lleno en el código es muy importante entender como se estructura una página web. Por tanto entender las etiquetas de HTML es indispensable para saber recorrer un documento HTML y extraer la información que necesitamos.

Un ejemplo muy básico de página web sería:

<html> 
 <head>
  <title>Scraping.link</title>
 </head>
 <body>
  <h1 id="titulo">Scraping.link</h1>
  <p class="parrafo">Bienvenido a tu primer scrapeo</p>
 <body>
</html>

En este ejemplo mostramos las etiquetas HTML más habituales de una página web, que pasamos a detallar:

  • Los documentos HTML están incluidos entre 2 etiquetas <html> y </html>
  • Dentro de <head> se incluye el <title> que es lo que se muestra en la barra del navegador, las metas, estilos y javascript
  • Dentro de la parte visible del HTML que vemos en el navegador se incluyen entre las etiquetas <body> y </body>
  • El texto encabezado se usa la etiqueta <h1> que es el encabezado más grande hasta <h6>
  • Los párrafos se definen con la etiqueta <p>

Como se puede ver todas las etiquetas tienes una apertura y un cierre. En algunos caso en la apertura se le pueden colocar atributos tales como id o class (nos ayudará al scrapeo), que se usan para dar formato con CSS e identificar estas partes desde JavaScript para trabajar con ellas.

Requisitos para comenzar

Vamos a utilizar 3 librerías de Python, que son:

  1. request, para realizar la petición HTTP y poder leer el documento HTML de una URL
  2. BeautifulSoup, para realizar las extracciones de las diferentes partes que nos interesan
  3. csv, para poder generar un fichero .csv con los datos extraídos

Por lo que vamos a utilizar el instalador de librerías de python que es pip

pip3 install requests
pip3 install beautifulsoup4
pip3 install csv

Vamos a pasar a realizar nuestro código para recorrer todas las frases sacando la categoría y el autor de la portada de ParaScrapear.com y lo vamos a guardar en un CSV

Comenzando tu primer script de scraping

Una vez que tenemos instalas estas 3 librerías vamos a crear nuestro script en un nuevo fichero que creemos con el nombre por ejemplo de scraping.py. Lo primero que haremos en este fichero es cargar las 3 librerías:

import requests
import csv
from bs4 import BeautifulSoup

A continuación vamos realizar una petición a la url https://parascrapear.com/ con la librería requests para traer todo su documento HTML que se queda guardado en la variable page.text, que es la entrada para parsear el documento HTML con BeautifulSoup en el siguiente código:

page = requests.get('https://parascrapear.com/')

soup = BeautifulSoup(page.text, 'html.parser')

Ahora necesitamos inspeccionar el documento HTML. Desde Chrome con pinchar en el segundo botón encima de la primera frase y darle a la opción «Inspeccionar» se nos abrirá lo que vemos en la siguiente captura. Como podemos ver cada frase está dentro de un blockquote y concretamente la frase la engloba una etiqueta <q> y </q>, para la categoría está en una etiqueta con class=»cat» y al autor le pasa lo mismo su etiqueta tiene la class=»author».

Por lo que vamos recorrer todos los blockquote y después dentro de cada uno extraer la frase, categoría y autor, como podemos ver en el siguiente código:

blockquote_items = soup.find_all('blockquote')

for blockquote in blockquote_items:
    autor = blockquote.find(class_='author').text
    categoria = blockquote.find(class_='cat').text
    frase = blockquote.find('q').text

    print([autor, categoria, frase])

Aquí está el código final con la escritura del resultado en el fichero CSV

import requests
import csv
from bs4 import BeautifulSoup

page = requests.get('https://parascrapear.com/')

soup = BeautifulSoup(page.text, 'html.parser')

f = csv.writer(open('frases.csv', 'w'))
f.writerow(['Autor', 'Categoria', 'Frase'])

blockquote_items = soup.find_all('blockquote')

for blockquote in blockquote_items:
    autor = blockquote.find(class_='author').text
    categoria = blockquote.find(class_='cat').text
    frase = blockquote.find('q').text

    f.writerow([autor, categoria, frase])

Ejemplos de códigos con BeautifulSoup

Aquí os dejo un listado de sencillos ejemplos de códigos usando BeautifulSoup:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Usamos cookies para mejorar la experiencia del usuario. Selecciona aceptar para continuar navegando. Más información

Go to up