Qué es el web scraping
Tomemos como ejemplo una plataforma de comparación de precios. Su función consiste en recopilar los precios de multitud de artículos de varios comercios online. Pero, ¿por qué limitarse a los productos físicos? Los sectores de las aerolíneas y la hostelería también se han vuelto mucho más accesibles para los consumidores gracias a los sitios web de comparación. Entonces, ¿cómo funcionan estas mágicas páginas web o aplicaciones? ¡Mediante el web scraping, por supuesto!
Seguramente te estarás preguntando ahora: «¿Para qué más puedo utilizar estos datos?». Veamos, pues, algunas de las aplicaciones prácticas del web scraping:
- Las agencias inmobiliarias necesitan datos sobre las propiedades, los barrios y las zonas en su conjunto para cerrar los mejores acuerdos
- Los responsables de ventas y marketing necesitan datos sobre la imagen de marca y los precios de la competencia para elaborar estrategias competitivas
- Las empresas deben generar clientes potenciales para encontrar clientes si quieren mantenerse en el mercado
Este artículo, muy bien redactado, trata sobre el web scraping y ofrece descripciones detalladas y ejemplos de uso adicionales.
Los rastreadores web no son fáciles de crear, aunque se comprenda cómo funcionan y las ventajas que pueden ofrecer. Existen muchas formas en que los sitios web pueden identificar y bloquear el acceso de los bots a sus datos.
A modo de ejemplo, aquí tienes algunos:
- Bloqueo geográfico: es posible que se te muestren resultados específicos de tu región cuando solicites información sobre otra zona (por ejemplo, precios de billetes de avión).
- Bloqueo de direcciones IP: un sitio web puede bloquearte o ralentizar tu conexión si detecta que estás realizando solicitudes repetidas desde una dirección IP concreta;
- Trampas de cebo: Los humanos no pueden ver los enlaces de las trampas de cebo, pero los bots sí; una vez que los robots caen en la trampa, se bloquea su dirección IP;
- CAPTCHAs: Las personas pueden resolver estos sencillos problemas lógicos con relativa rapidez, pero a los rastreadores automáticos les suelen resultar difíciles;
No es tarea fácil superar todos estos obstáculos. No es tan difícil crear un bot sencillo, pero desarrollar un excelente rastreador web es un poco más complicado. Por eso, en la última década, las API para el rastreo web se han convertido en uno de los temas más candentes.
Con WebScrapingAPI se puede recopilar contenido HTML de cualquier sitio web, y todos los problemas que hemos mencionado anteriormente se resolverán automáticamente. Además, utilizamos Amazon Web Services para garantizar la velocidad y la escalabilidad. Suena interesante, ¿verdad? ¡Pues no te quedes solo en las palabras! Pruébalo tú mismo con las 5000 llamadas a la API gratuitas que obtienes como parte de la prueba gratuita de WebScrapingAPI.
Entender la Web
Para comprender la Web, es necesario conocer el Protocolo de Transferencia de Hipertexto (HTTP). Este protocolo explica cómo se comunican un servidor y un cliente. Un mensaje contiene información que describe al cliente y cómo gestiona los datos: método, versión HTTP y encabezados.
En el caso de las solicitudes HTTP, los rastreadores web utilizan el método GET para recuperar datos del servidor. Además, existen algunos métodos avanzados, como POST y PUT. A continuación se detallan los métodos HTTP para tu referencia.
En los encabezados HTTP se puede encontrar diversa información adicional sobre las solicitudes y las respuestas. Para el web scraping, estos son los que importan:
- User-Agent: los rastreadores web se basan en este encabezado para que sus solicitudes parezcan más realistas; contiene información como la aplicación, el sistema operativo, el software y la versión.
- Cookie: el servidor y la solicitud pueden intercambiar información confidencial (como tokens de autenticación).
- Referrer: contiene el sitio de origen que visitó el usuario; por lo tanto, es fundamental tener esto en cuenta.
- Host: identifica el servidor al que te estás conectando.
- Accept: especifica el tipo de respuesta del servidor (por ejemplo, text/plain, application/json).
Comprender Ruby
Ruby es un lenguaje de programación multiparadigma de alto nivel que, además, es totalmente interpretable. Esto significa que el código del programa se almacena en texto sin formato, el cual se transmite al intérprete para que lo ejecute.
En 1995, Yukihiro Matsumoto (también conocido como Matz en la comunidad Ruby) combinó características de diferentes lenguajes de programación, como Perl, Lisp y Smalltalk, para crear uno nuevo centrado en la simplicidad y la productividad.
Es un lenguaje de programación especializado, cuyo ámbito natural son las aplicaciones web. Estas son las principales ventajas de utilizar este lenguaje en tus proyectos:
- Ofrece resultados rápidos. En combinación con el marco Rails, permite crear software con relativa rapidez; por eso las startups suelen preferir Ruby para desarrollar rápidamente sus MVP (productos mínimos viables).
- Está bien desarrollado y lo mantiene la creciente comunidad de Ruby.
- Las herramientas y bibliotecas útiles (denominadas «gems») facilitan el cumplimiento de las mejores prácticas de programación en casi cualquier situación.
Por otro lado, estas ventajas no convierten a Ruby en una solución mágica y universal para todo nuevo software. También conviene tener en cuenta estas características del lenguaje antes de tomar una decisión:
- A medida que aumentan de tamaño, las aplicaciones desarrolladas con Ruby se vuelven más lentas, lo que plantea problemas de escalabilidad.
- Su ámbito natural son las aplicaciones web. Por lo tanto, no es muy adecuado para aplicaciones de escritorio o móviles.
- Dado que utiliza un intérprete, un posible código orientado a objetos será más lento.
Crea tu propio raspador web
Ahora podemos empezar a hablar de la extracción de datos. Lo primero es lo primero: necesitamos una página web que ofrezca información útil.
Paso 1: Configurar el entorno
Para crear nuestro rastreador web en Ruby, primero debemos asegurarnos de que contamos con todos los requisitos previos:
- La última versión estable de Ruby: consulta su guía de instalación oficial para elegir el método más adecuado para tu sistema operativo.
- Un IDE: en esta guía utilizaremos Visual Studio Code, ya que es ligero y no requiere configuraciones adicionales, pero puedes elegir el IDE que prefieras.
- Bundler: una herramienta de Ruby para la gestión de dependencias (también conocida como «gem»);
- Watir: una gem basada en Selenium que se utiliza para realizar pruebas automáticas, ya que permite imitar el comportamiento del usuario en un navegador;
- Webdrivers: una gema recomendada por Watir que descarga automáticamente el controlador más reciente para una instancia del navegador;
- Nokogiri: una biblioteca muy conocida por su capacidad para facilitar el análisis de páginas web. Es capaz de analizar código HTML y XML, detecta documentos HTML dañados y permite acceder a los elementos mediante selectores XPath y CSS3.
Una vez configurado el entorno de Ruby, crea un nuevo directorio en cualquier lugar de tu ordenador y ábrelo con el IDE que prefieras. A continuación, ejecuta el siguiente comando en una ventana de terminal para instalar nuestra primera gema:
> gem install bundler
Ahora crea un archivo llamado Gemfile en el directorio raíz de tu proyecto. Aquí vamos a añadir el resto de las gemas como dependencias:
source 'https://rubygems.org'
gem 'watir', '~> 6.19', '>= 6.19.1'
gem 'webdrivers', '~> 4.6'
gem 'nokogiri', '~> 1.11', '>= 1.11.7'
Ahora vuelve a la ventana de la terminal y ejecuta el siguiente comando para instalar las gemas que hemos declarado:
> bundle install
¡Qué buena configuración! Por último, solo tienes que crear un archivo llamado «scraper.rb» para guardar el código de nuestro rastreador web. Todo lo que escribamos aquí lo podremos ejecutar con el comando:
> ruby scraper.rbPaso 2: Revisa la página que quieres extraer
¡Genial, sigamos! Ve a la página que quieras rastrear, haz clic con el botón derecho en cualquier lugar de la página y selecciona «Inspeccionar elemento». Se abrirá la consola de desarrollador, donde podrás ver el código HTML de la página web.

Paso 3: Envía una solicitud HTTP y extrae el código HTML
Ahora, para obtener ese código HTML en nuestro equipo local, tenemos que enviar una solicitud HTTP mediante Watir para que nos devuelva el documento. Volvamos al IDE y pongamos esta idea en práctica.
En primer lugar, escribe las importaciones que necesitamos:
require 'watir'
require 'webdrivers'
require 'nokogiri'
A continuación, inicializamos una instancia del navegador y accedemos al sitio web del que queremos extraer datos. Después, obtenemos el código HTML y se lo pasamos al constructor de Nokogiri, que nos ayudará a analizar el resultado.
browser = Watir::Browser.new
browser.goto 'https://blog.eatthismuch.com/latest-articles/'
parsed_page = Nokogiri::HTML(browser.html)
File.open("parsed.txt", "w") { |f| f.write "#{parsed_page}" }
browser.close
También guardamos el resultado en un archivo de texto llamado «parsed.txt» para poder revisar el código HTML. Es importante cerrar la conexión tras recibir la respuesta, ya que el proceso seguirá ejecutándose.
Paso 4: Extracción de secciones específicas
Así pues, tenemos un documento HTML, pero queremos datos, lo que significa que debemos analizar la respuesta anterior para convertirla en información legible para los humanos.
Empecemos poco a poco: extraigamos el título de la página web. Una característica destacable de Ruby es que todo es un objeto, con muy pocas excepciones, lo que significa que incluso una simple cadena de caracteres puede tener atributos y métodos.

Por lo tanto, podemos acceder fácilmente al valor del título de la página web a través de los atributos del objeto `parsed_page`.
asigna el título de la página analizada
A continuación, vamos a extraer todos los enlaces de la página web. Para ello, utilizaremos un método más genérico que analiza etiquetas específicas: el método CSS.
links = parsed_page.css('a')
links.map {|elemento| elemento["href"]}
puts links
También utilizamos el método «map» para conservar únicamente los enlaces con el atributo «href» del código HTML.
Pongamos un ejemplo más realista. Tenemos que extraer los artículos del blog, junto con su título, su URL y su metadescripción.

If you inspect one of the article cards, you can see that we can get the address and the article’s title through the link’s attributes. Also, the meta description is under a <div> tag with a specific class name.
Of course, there are many ways to perform this search. The one we’ll use will consist of looking for all the <div> tags with the td_module_10 class name and then iterating through each one of them to extract the <a> tags and the inner <div> tags with the td-excerpt class name.
article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
end
Sí, como ya habrás adivinado, lo que nos permite hacerlo es una expresión XPath, ya que buscamos elementos HTML por sus nombres de clase y sus elementos ascendentes.
Paso 5: Exportar los datos a un archivo CSV
Este tipo de extracción puede resultar útil cuando es necesario transferir los datos a otra aplicación, en nuestro caso, un agregador de artículos. Por lo tanto, para ello, debemos exportar los datos analizados a un archivo externo.
Crearemos un archivo CSV, ya que otra aplicación puede leerlo fácilmente y se puede abrir con Excel para seguir procesándolo. Primero, solo una importación más:
require 'csv'
A continuación, crearemos el archivo CSV en modo «añadir» y envolveremos el código anterior, de modo que ahora nuestro rastreador tendrá este aspecto:
CSV.open("articles.csv", "a+") do |csv|
csv << ["title", "link", "meta"]
article_cards = parsed_page.xpath("//div[contains(@class, 'td_module_10')]")
article_cards.each do |card|
title = card.xpath("div[@class='td-module-thumb']/a/@title")
link = card.xpath("div[@class='td-module-thumb']/a/@href")
meta = card.xpath("div[@class='item-details']/div[@class='td-excerpt']")
csv << [title.first.value, link.first.value, meta.first.text.strip]
end
end
¡Genial, eso es todo! Ahora podemos ver todos los datos analizados de una forma clara, sencilla y fácil de compartir.

Conclusión y alternativas
Ya hemos terminado nuestro tutorial. ¡Enhorabuena! Esperamos que este artículo te haya proporcionado mucha información sobre el web scraping y te haya ayudado a comprenderlo mejor.
Es evidente que esta tecnología puede hacer mucho más que alimentar a los agregadores de artículos. La clave está en encontrar los datos adecuados y analizarlos para descubrir nuevas posibilidades.
Sin embargo, como mencioné al principio del artículo, los rastreadores web se enfrentan a numerosos retos. Además de impulsar tu negocio, supone una gran oportunidad de aprendizaje para los desarrolladores a la hora de resolver problemas utilizando sus propios rastreadores web. No obstante, es posible que quieras reducir costes si necesitas completar un proyecto (tiempo, dinero, personal).
Una API diseñada específicamente para resolver estos problemas siempre será más fácil de usar. Aunque puedan surgir obstáculos como la renderización de JavaScript, los servidores proxy, los CAPTCHA y otros factores que bloquean el acceso, WebScrapingAPI los supera todos y ofrece una experiencia personalizable. Si aún tienes dudas, ¿por qué no pruebas la versión de prueba gratuita?




