Introducción al Web Scraping

David Castro
4 min readApr 21, 2021

--

Photo by Christopher Gower on Unsplash

Las páginas web son una fuente inagotable de información. Hoy en día foros, blogs y más espacios que publican datos de interés, que pueden sernos de gran utilidad para realizar todos los análisis que imaginemos.

Las páginas web pueden ofrecernos información en tres formas:

  • Archivos: Los cuales están listos a través de la página web para ser descargados.
  • Servicios: La página web ofrece sus datos a través de un servicio como API REST
  • Directamente: La página web ofrece la información a través su sitio, es decir, los datos están incrustados en la misma página web. A su vez esta ultima forma puede subdividirse en dos: La primera es que la información esté disponible accediendo a la URL y la segunda es que la página requiere una interacción previa del usuario para mostrar la información final.

Esta ultima forma en la cual las páginas web nos ofrecen información y la extracción de esta, es lo que se conoce como Web Scraping.

¿Qué es Web Scraping?

Web scraping, es una técnica utilizada mediante programas de software para extraer información de sitios web. Usualmente, estos programas simulan la navegación de un humano en la World Wide Web ya sea utilizando el protocolo HTTP manualmente, o incrustando un navegador en una aplicación. Más información: https://es.wikipedia.org/wiki/Web_scraping

Entender HTML

Para hacer web scraping es de vital importancia entender la estructura básica de un documento HTML y recordar las etiquetas HTML más usadas

La estructura general de un documento HTML es el siguiente:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Titulo</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Tempore esse, laborum harum dignissimos
mollitia voluptatem quod dicta, corporis ratione repellat commodi minima, unde fugiat quaerat nulla sapiente temporibus eligendi sint?</p>
</body>
</html>

A continuación algunas de las etiquetas HTML más usadas:

Listas

<ul>
<li>Uno</li>
<li>Dos</li>
<li>Tres</li>
</ul>

Enlaces

<a href="<http://davidcasr.co/>">Mi página web</a>

Imágenes

<img src="my_img.jpg" alt="davidcasr" width="500" height="500">

Tablas

<table>
<tr>
<th>Mes</th>
<th>Valor</th>
</tr>
<tr>
<td>Enero</td>
<td>$100</td>
</tr>
</table>

Si quieres conocer todas las etiquetas de HTML recomiendo esta página web, con ejemplos y un buen diseño: https://htmlreference.io/

Recuerda que es importante tener clara la estructura de HTML y la definición del DOM (Document Object Model), esto te ayudará a entender como extraer la información de una web

The HTML DOM Tree of Objects https://www.w3schools.com/js/js_htmldom.asp

Librerías para Web Scraping

  • Requests: Permite controlar HTTP
  • BeatifulSoup: Extraer información de un documento HTML
  • Selenium: Crear navegadores fantasmas para controlar sitios web de manera automática
  • Scrapy: Framework para hacer web scraping

Extracción de información: Que forma parte de la página

Consiste en obtener datos a partir de una página web. Para extraer datos, necesitamos conocer la estructura de la página web, la cual está compuesta normalmente por código HTML, scripts y estilos.

Web Scraping con Requests & BeautifulSoup

Usaremos el sitio web quotes.toscrape.com para el siguiente ejemplo. Este sitio web contiene cientos de citas famosas, sus autores y también algunas etiquetas para describir cada cita. Esta es la información que recopilaremos, en este caso especifico realizaremos extracción de las frases o citas de la primera página. Este sitio web permite hacer procesos de scraping, recuerden que es importante revisar si la página web para comprobar que permite realizar procesos de scraping

import requests
from bs4 import BeautifulSoup
url = '<http://quotes.toscrape.com/>'
web = requests.get(url)
bs = BeautifulSoup(web.text)
list = bs.find_all('div', attrs={'class': 'quote'})
for item in list:
i = item.find('span', attrs={'class': 'text'})
print(i.text)

El script es sencillo y permite extraer el listado de frases famosas correspondientes a la primera página

Extracción de información: Que requiere interacción previa

A menudo nos encontraremos con páginas web que nos solicitan información que debemos completar antes de mostrar un resultado deseado, es decir, necesitan cierta interacción previa por nuestra parte. Un ejemplo son las webs que requieren introducir un usuario y contraseña para ingresar o en nuestro caso, la pagina web de Latam (aerolínea) que nos solicita los lugares de salida y llegada para consultar la disponibilidad y precios de un vuelo.

Web Scraping con Selenium

Usaremos el sitio web de https://www.latamairlines.com/co/es para el siguiente ejemplo.

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Remote(
command_executor='<http://selenium-hub:4444/wd/hub>',
desired_capabilities=DesiredCapabilities.CHROME)
driver.get('<https://www.latamairlines.com/co/es>')# Imprimir titulo de página web
print(driver.title)
# quit () es un comando webdriver que llama al método driver.dispose,
# que a su vez cierra todas las ventanas del navegador y finaliza la sesión de WebDriver.
# Si no usamos quit () al final del programa, la sesión de WebDriver no se cerrará correctamente
# y los archivos no se borrarán de la memoria. Esto puede resultar en errores de pérdida de memoria.
driver.quit()

Este ejemplo es bastante sencillo y permite extraer el titulo de la página. El script se programó de esa manera porque estamos usando selenium-hub sobre un ambiente Docker.

🚀 Repositorio

Referencias

--

--

David Castro
David Castro

Written by David Castro

🚀 Software Engineer with a master’s in Software Development, working as a 🖥️ Backend Developer using 🐍 Python.

No responses yet