¿Qué son los rastreadores web?
Existen numerosos motores de búsqueda, y todos los utilizamos. Sus servicios son fáciles de usar: basta con preguntar algo y ellos buscan por toda la web para encontrarte una respuesta. Entre bastidores, es el rastreador Googlebot de Google el que hace que el motor de búsqueda de Google sea todo un éxito.
Al rastrear la web en busca de páginas según las palabras clave introducidas, los rastreadores ayudan a los motores de búsqueda a catalogar esas páginas y a mostrarlas posteriormente mediante la indexación. Los motores de búsqueda dependen de los rastreadores para recopilar información de los sitios web, como direcciones URL, hipervínculos, metaetiquetas y artículos, además de examinar el código HTML.
Gracias a la capacidad del bot para realizar un seguimiento de las páginas a las que ya ha accedido, no tienes que preocuparte de que se quede atascado en la misma página web indefinidamente. La Internet pública y la selección de contenidos plantean varios retos a los rastreadores web. Cada día, los sitios web existentes publican docenas de nuevos contenidos, y ni siquiera voy a mencionar la cantidad de sitios web nuevos que aparecen a diario.
Al final, esto les obligaría a revisar millones de páginas y a actualizar sus índices continuamente. Los sistemas que analizan el contenido de los sitios web dependen de ellos, por lo que son esenciales.
Así pues, los rastreadores son importantes, pero ¿por qué los mencionamos? Porque vamos a crear nuestro propio bot para que nos ayude en el proceso de extracción de datos. De esta forma, podremos confiar en él para que recupere las URL en lugar de tener que introducirlas manualmente en el scraper. ¡Más automatización, genial!
Instalación
Ahora que ya tenemos una idea básica de cómo funcionan los rastreadores web, quizá te preguntes cómo funciona todo esto en la práctica. ¡Pues vamos a profundizar en el tema!
Lo primero es lo primero: tenemos que configurar nuestro entorno de trabajo. Asegúrate de que tu equipo cumple los siguientes requisitos previos:
- python3;
- Un entorno de desarrollo integrado (IDE) para Python. En esta guía utilizaremos Visual Studio Code, ya que es ligero y no requiere ninguna configuración adicional. No obstante, el código es independiente del IDE, por lo que puedes elegir cualquier IDE con el que te sientas cómodo;
Por último, pero no por ello menos importante, necesitaremos una clave API. Puedes crear una cuenta gratuita de WSA, que te dará derecho a 5000 llamadas API durante los primeros 14 días. Una vez te hayas registrado, solo tienes que ir a tu panel de control, donde encontrarás tu clave API y otros recursos útiles.

Desarrollo del rastreador
Genial, ya tenemos las herramientas, así que estamos más cerca de empezar a crear nuestro rastreador. Pero, ¿cómo lo vamos a utilizar? Su implementación puede variar en función de nuestro objetivo final.
Elige un sitio web e inspecciona el HTML
Para este tutorial, hemos elegido una página web de comercio electrónico que vende productos de cero residuos para distintos usos. Navegaremos por todas las páginas, extraeremos la lista de productos de cada una de ellas y, por último, guardaremos los datos en un archivo CSV para cada página.
Para ello, primero debemos examinar la estructura de la página y definir nuestra estrategia. Haz clic con el botón derecho en cualquier punto de la página, selecciona «Inspeccionar elemento» y aparecerá la «Consola de desarrollador». Aquí podrás ver el documento HTML del sitio web, que contiene toda la información que necesitamos.

Construye el robot de rastreo
¡Bien, ahora ya podemos escribir algo de código!
Empieza abriendo una ventana de terminal en tu IDE y ejecuta el siguiente comando, que instalará BeautifulSoup, una biblioteca que nos ayudará a extraer los datos del HTML:
> pip install beautifulsoup4
A continuación, crea una carpeta llamada «productos». Esto te ayudará a organizar y guardar los resultados del scraping en varios archivos CSV.
Por último, crea el archivo «crawler.py». Aquí es donde vamos a escribir todo nuestro código y la lógica de rastreo. Cuando hayamos terminado, podremos ejecutar el archivo con el siguiente comando:
> py crawler.py
A continuación, importemos las bibliotecas que necesitamos y definamos algunas variables globales:
import requests
from bs4 import BeautifulSoup
import csv
BASE_URL = "https://www.shopetee.com"
SECTION = "/collections/all-collections"
FULL_START_URL = BASE_URL + SECTION
ENDPOINT = "https://api.webscrapingapi.com/v1/"
API_KEY = "API_KEY"
Ahora, definamos el punto de entrada de nuestro rastreador:
def crawl(url, nombre_archivo):
cuerpo_página = get_page_source(url, nombre_archivo)
soup = BeautifulSoup(cuerpo_página, 'html.parser')
start_crawling(soup, nombre_archivo)
crawl(FULL_START_URL, 'etee-page1.txt')
Implementamos la función de rastreo, que extraerá los documentos HTML mediante nuestro procedimiento get_page_source. A continuación, creará el objeto BeautifulSoup, que facilitará el análisis del código, y llamará a la función start_crawling, que comenzará a navegar por el sitio web.
def get_page_source(url, filename):
params = {
"api_key": API_KEY,
"url": url,
"render_js": '1'
}
page = requests.request("GET", ENDPOINT, params=params)
soup = BeautifulSoup(page.content, 'html.parser')
body = soup.find('body')
file_source = open(filename, mode='w', encoding='utf-8')
file_source.write(str(body))
file_source.close()
return str(body)
As stated earlier, the get_page_source function will use WebScrapingAPI to get the HTML content of the website and will write in a text file in the <body> section, as it’s the one containing all the information we are interested in.
Ahora, demos un paso atrás y veamos cómo alcanzar nuestros objetivos. Los productos están organizados en páginas, por lo que tendremos que acceder a cada una de ellas varias veces para extraerlos todos.
Esto significa que nuestro rastreador seguirá una serie de pasos recursivos mientras haya páginas disponibles. Para plasmar esta lógica en código, debemos analizar cómo describe el HTML estas condiciones.
Si vuelves a la Consola de desarrolladores, verás que cada número de página es, en realidad, un enlace a una nueva página. Es más, dado que estamos en la primera página y no hay ninguna anterior a esta, la flecha de la izquierda está desactivada.

Por lo tanto, el siguiente algoritmo debe:
- Accede a la página;
- Extrae los datos (lo haremos en el siguiente paso);
- Busca el contenedor de paginación en el documento HTML; comprueba si la flecha «Página siguiente» está desactivada; si es así, detente; si no, obtén el nuevo enlace y llama a la función de rastreo para la nueva página.
def start_crawling(soup, filename):
extract_products(soup, filename)
pagination = soup.find('ul', {'class': 'pagination-custom'})
next_page = pagination.find_all('li')[-1]
if next_page.has_attr('class'):
if next_page['class'] == ['disabled']:
print("You reached the last page. Stopping the crawler...")
else:
next_page_link = next_page.find('a')['href']
next_page_address = BASE_URL + next_page_link
next_page_index = next_page_link[next_page_link.find('=') + 1]
crawl(next_page_address, f'etee-page{next_page_index}.txt')Extraer datos y exportarlos a CSV
Por último, veamos cómo podemos extraer los datos que necesitamos. Echemos otro vistazo al documento HTML y veremos que podemos acceder a la información relevante fijándonos en los nombres de las clases.

Extraeremos el nombre del producto, la valoración, el número de reseñas y el precio, pero puedes ampliar la información tanto como quieras.
¿Recuerdas la carpeta «productos» que creamos antes? Ahora vamos a crear un archivo CSV para exportar los datos que extraemos de cada página. La carpeta nos ayudará a organizarlos todos juntos.
def extract_products(soup, filename):
csv_filename = filename.replace('.txt', '.csv')
products_file = open(f'products/{csv_filename}', mode='a', encoding='utf-8', newline='')
products_writer = csv.writer(products_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
products_writer.writerow(['Title', 'Rating', 'Reviews', 'Price on sale'])
products = soup.find_all('div', {'class': 'product-grid-item'})
for product in products:
product_title = product.find('div', {'class': 'item-title'}).getText().strip()
product_rating = product.find('span', {'class': 'jdgm-prev-badge__stars'})['data-score']
product_reviews = product.find('span', {'class': 'jdgm-prev-badge__text'}).getText().strip()
product_price_on_sale = product.find('span', {'class': 'money'}).getText()
products_writer.writerow([product_title, product_rating, product_reviews, product_price_on_sale])
Una vez ejecutado el programa, podrás ver toda la información extraída en los archivos recién creados.

Reflexiones finales
¡Y eso es prácticamente todo! Acabamos de crear nuestro propio rastreador web utilizando BeautifulSoup y WebScrapingAPI de Python en menos de 100 líneas de código. Por supuesto, puede variar en función de la complejidad de tu tarea, pero es un resultado bastante bueno para un rastreador que recorre las páginas de un sitio web.
Para esta guía, hemos utilizado la versión de prueba gratuita de WebScrapingAPI, que ofrece 5000 llamadas a la API durante los primeros 14 días, más que suficientes para crear un potente rastreador.
Resultó muy útil centrarnos únicamente en la lógica del rastreador, en lugar de preocuparnos por los diversos retos que plantea el web scraping. Esto nos ahorró tiempo, energía y otros costes considerables, como el uso de nuestros propios proxies, por ejemplo, que son solo algunas de las ventajas que se pueden obtener al utilizar una API para el web scraping.




