En el vertiginoso mundo del eCommerce, seguir a la vanguardia significa estar atento a la competencia. Una forma de hacerlo es mediante el raspado web, una técnica para extraer datos de sitios web. Tanto si tiene experiencia como si comienza en el mundo de la extracción de datos, este artículo está diseñado para ayudarle a comprender las dificultades del raspado web de sitios web de eCommerce.
Hay todo tipo de razones por las que puede interesarle raspar sitios web de eCommerce, incluyendo el análisis de la competencia, la investigación de mercado, el control de precios, la generación de clientes potenciales, o la toma de decisiones basada en datos.
En este tutorial, aprenderá sobre algunos de los desafíos comunes que enfrentará al raspar sitios web de eCommerce y cómo rasparlos utilizando Playwright, una biblioteca de Python, y el Navegador Scraping Browser de Bright Data.
Problemas con el raspado web mediante navegadores locales
Si bien tener la capacidad de escribir raspadores que permitan extraer grandes cantidades de datos es asombroso, hacerlo por primera vez puede ser un proceso desafiante. Por ejemplo, cuando se utilizan navegadores locales, los desarrolladores a menudo se encuentran con varios problemas que pueden obstaculizar su eficiencia y eficacia. Algunos de los problemas más comunes son los siguientes:
- Bloqueo de IP: los sitios web suelen hacer un seguimiento de las direcciones IP que realizan las solicitudes. Si detectan un número anormal de peticiones desde una misma IP (típico en raspado web o aplicación de fuerza bruta).
Cuando se utiliza un navegador local, todas las peticiones proceden de una única IP, lo que supone un problema importante. - Limitación de velocidad: muchos sitios web aplican la limitación de velocidad, permitiendo sólo un cierto número de peticiones desde una dirección IP en un periodo de tiempo determinado. Si se sobrepasa este límite, pueden bloquearse o ralentizarse más peticiones, lo que dificulta el proceso de raspado.
- Falta de proxies: sin un grupo de proxies, todas las solicitudes de una operación de raspado proceden de la misma dirección IP. Esto facilita que los sitios web detecten y bloqueen las actividades de raspado. Por el contrario, el uso de un grupo de proxies permite que las solicitudes procedan de diferentes direcciones IP, lo que reduce el riesgo de detección.
- Retos CAPTCHA: los sitios web pueden utilizar desafíos CAPTCHA para verificar que el usuario es humano y no un bot. Los navegadores locales a menudo carecen de la funcionalidad para resolver automáticamente estos desafíos, lo que los convierte en un obstáculo importante en los esfuerzos de raspado.
- Contenido dinámico del sitio web: muchos sitios web modernos utilizan JavaScript para cargar contenidos dinámicamente. Un navegador local puede tener problemas para raspar estos sitios web con precisión porque el contenido puede no estar completamente cargado antes de que comience el raspado.
En el contexto del raspado con un navegador local, estos problemas se combinan para hacer que el raspado web sea todo un reto. La falta de funciones avanzadas, como la rotación de IP y la resolución automática de CAPTCHA, puede ralentizar los procesos de raspado y disminuir la calidad y cantidad de los datos recopilados. Es crucial que los desarrolladores sean conscientes de estos problemas comunes y busquen herramientas para sortearlos con efectividad.
La siguiente sección discutirá cómo el Navegador de Raspado de Datos de Bright puede ayudar a resolver estos problemas, haciendo del raspado web una experiencia mucho más fluida y productiva.
Cómo raspar con el explorador de raspado de Bright Data
En el mundo del raspado web, Bright Data se destaca como un proveedor de vanguardia, y en el corazón de las ofertas de Bright Data se encuentra su navegador de raspado web, una herramienta diseñada específicamente para abordar los desafíos que enfrenta la extracción de datos.
Scraping Browser aborda fácilmente cualquier problema de bloqueo de IP porque tiene acceso a un vasto conjunto de IP residenciales y móviles. Esto significa que puede rotar las IP y emular el comportamiento orgánico de los usuarios, reduciendo significativamente el riesgo de encontrar bloqueos.
Del mismo modo, al aprovechar el amplio conjunto de IP de Bright Data, el Scraping Browser puede distribuir las solicitudes entre varias IP, mitigando eficazmente el problema de la limitación de velocidad. Además, con Scraping Browser, obtendrá una gestión automática del proxy. Esto significa que Scraping Browser maneja la rotación de proxy, asegurando que sus actividades de raspado continúen sin intervención manual.
El Scraping Browser también ofrece protección avanzada de huellas digitales del navegador, lo que le permite imitar a un usuario real. Esto hace que sea más difícil para los sitios web detectar y bloquear sus esfuerzos de raspado:
Con estas características en mente, sumérjase en el tutorial y aprenda a utilizar Scraping Browser de Bright Data para raspar un sitio web de eCommerce. En este caso, utilizará Python como lenguaje de programación.
Paso 1: Configurar un nuevo proyecto Python
El primer paso de este tutorial es configurar un nuevo proyecto Python. Este es su espacio de trabajo para la tarea de raspado. Puede utilizar cualquier editor de texto o entorno de desarrollo integrado (IDE) de su elección.
Además, asegúrese de que Python está instalado en su máquina. Puede confirmarlo escribiendo python --version
en su terminal. Si Python está instalado, este comando muestra su versión. Si no, es necesario instalarlo.
Una vez que se haya instalado Python, se mostrará la versión de Python en su terminal. A continuación, introduzca los siguientes comandos:
mkdir ecommerce-scraping # This command creates a new directory named ecommerce-scraping.
cd ecommerce-scraping # This command navigates into the newly created directory.
python -m venv env # This command creates a new virtual environment in your project directory.
source env/bin/activate # This command activates the virtual environment.
Crear un entorno virtual es una buena práctica, ya que aísla su proyecto y sus dependencias de otros proyectos Python, evitando cualquier conflicto entre las diferentes versiones de las bibliotecas.
Paso 2: Importar Playwright en el proyecto
Playwright es una librería Python para automatizar y probar navegadores web. Se utilizará para controlar el navegador de raspado.
Para instalar Playwright, se utiliza pip, que es un instalador de paquetes para Python:
pip install playwright
Después de instalar Playwright, es necesario ejecutar el comando playwright install
. Esto descarga los binarios del navegador que Playwright necesita para automatizar los navegadores:
playwright install
Paso 3: Configurar una nueva cuenta de Bright Data
A continuación, es necesario disponer de una cuenta de Bright Data. Si no tiene una, vaya al sitio web de Bright Data y regístrese. Una vez que tenga una cuenta, podrá crear y gestionar sus instancias de Scraping Browser y obtener acceso a sus credenciales exclusivas:
Paso 4: Crear una nueva instancia de Scraping Browser
Una vez que tenga acceso a una cuenta de Bright Data, inicie sesión y navegue hasta la sección Scraping Browser, donde podrá crear una nueva instancia del Scraping Browser.
Anote su ID de host, ya que es necesario cuando se conecte al Scraping Browser:
Paso 5: Conectarse a la instancia de Scraping Browser
Ahora es el momento de conectar Playwright a su instancia de Scraping Browser. Bright Data proporciona un script de ejemplo en su documentación que puede utilizar como punto de partida. Recuerde sustituir YOUR_ZONE_USERNAME
, YOUR_ZONE_PASSWORD
y YOUR_ZONE_HOST
por sus credenciales reales de Bright Data y el ID de la instancia de Scraping Browser que ha creado:
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://example.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
Guarde este archivo como main.py
en el directorio de su proyecto. A continuación, ejecute el script con lo siguiente:
python main.py
Este script inicia una nueva instancia del navegador Chromium y navega a la URL especificada. A continuación, imprime el contenido de la página web y cierra el navegador.
En este punto, ha comprobado que puede conectarse a la instancia del navegador de raspado. Dado que este es su script base, repase rápidamente el código:
import asyncio, async_playwright
son las importaciones necesarias para el script.asyncio
es una librería para escribir código concurrente de un solo hilo usando coroutines, yasync_playwright
es la API asíncrona de la librería Playwright.auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
configura la autenticación para el navegador de raspado de datos de Bright utilizando el nombre de usuario y la contraseña de su zona.browser_url = f'wss ://{auth}@YOUR_ZONE_HOST
construye la URL WebSocket que conecta con el Scraping Browser de Bright Data.browser = await pw.chromium.connect_over_cdp(browser_url)
se conecta a Scraping Browser de Bright Data mediante el explorador Chromium. La palabra claveawait
pausa la ejecución de la función hasta que se establece la conexión.await page.goto('https://example.com', timeout=120000)
navega la página a la URL especificada. El parámetrotimeout
especifica cuánto tiempo se debe esperar a que finalice la navegación antes de lanzar un error.print(await page.evaluate('()=>document.documentElement.outerHTML'))
evalúa el código JavaScript en el contexto de la página e imprime el resultado. En este caso, el código JavaScript devuelve todo el contenido HTML de la página.
Paso 6: Raspar un archivo
Una vez que se haya conectado a la instancia Scraping Browser, estará listo para comenzar a raspar. En este tutorial, raspará Books to Scrape, un sitio web de eCommerce que permite el raspado.
Abra su archivo main.py
y reemplace el contenido con el siguiente código; luego ejecute el script en su terminal:
import asyncio
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting');
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected');
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
print(await page.evaluate('()=>document.documentElement.outerHTML'))
await browser.close()
asyncio.run(main())
Verá impreso el contenido de la página de inicio de Books to Scrape. En este punto, la ejecución de este script no devuelve nada útil; sólo se obtiene la totalidad del contenido HTML del sitio web de destino.
Paso 7: Extraer información estructurada
Para hacer este tutorial un poco más útil, extraiga algunos datos estructurados. Este proceso varía dependiendo de los datos específicos en los que esté interesado, pero para este ejemplo, extraiga los nombres y precios de los libros en la página de inicio.
Se empieza inspeccionando la página de inicio de books.toscrape.com
e identificando los elementos HTML que contienen los nombres y precios de los libros. Los nombres de los libros están en las etiquetas <h3>
dentro de <article class="product_pod">
, y los precios están en las etiquetas <p class="price_color">
dentro de las mismas etiquetas <article>
.
He aquí cómo modificar el script para extraer esta información:
from playwright import sync_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
# Extract and print each book details in a loop
async def get_book_details(book):
# Extract and print book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
print(f'{book_name}: {book_price}')
# Use asyncio.gather() to execute all async calls concurrently
await asyncio.gather(*(get_book_details(book) for book in books))
await browser.close()
asyncio.run(main())
Cuando se ejecuta este script, se ve una lista de nombres de libros y sus precios impresos en su terminal. Se parece a esto:
Se trata de un ejemplo muy sencillo; sin embargo, demuestra cómo se pueden extraer datos estructurados de un sitio web utilizando Playwright y Bright Data. Puede adaptar este script para raspar diferentes tipos de datos de otras páginas o sitios web.
Ahora, vaya un paso más allá y genere un archivo CSV que contenga los datos raspados.
Paso 8: Guardar los datos raspados en un archivo CSV
Para guardar los datos raspados en un archivo CSV, es necesario importar el módulo csv
y crear un nuevo archivo CSV en la función main()
. A continuación, puede escribir los datos raspados en el archivo CSV en la función get_book_details()
.
Abra su archivo main.py
y añada el código a continuación:
import asyncio
import csv
from playwright.async_api import async_playwright
auth = 'YOUR_ZONE_USERNAME:YOUR_ZONE_PASSWORD'
browser_url = f'wss://{auth}@YOUR_ZONE_HOST'
async def main():
async with async_playwright() as pw:
print('connecting')
browser = await pw.chromium.connect_over_cdp(browser_url)
print('connected')
page = await browser.new_page()
print('goto')
await page.goto('https://books.toscrape.com', timeout=120000)
print('done, evaluating')
# Find all the books in the article elements
books = await page.query_selector_all('article.product_pod')
async def get_book_details(book):
# Extract book name and price
book_name_element = await book.query_selector('h3 > a')
book_name = await book_name_element.get_attribute('title')
book_price_element = await book.query_selector('div.product_price > p.price_color')
book_price = await book_price_element.inner_text()
return book_name, book_price
# Use asyncio.gather() to execute all async calls concurrently
book_details = await asyncio.gather(*(get_book_details(book) for book in books))
# Write book details to a CSV file
with open('books.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Book Name', 'Price']) # Write header
writer.writerows(book_details) # Write book details
await browser.close()
asyncio.run(main())
Si se ejecuta esta secuencia de comandos, verá un nuevo archivo llamado books.csv
en el directorio del proyecto. Abra este archivo y podrá ver los datos raspados en un formato CSV como éste:
Conclusión
En este tutorial, ha aprendido a utilizar Playwright y Bright Data para raspar datos de un sitio web de eCommerce. Este tutorial sólo ha arañado la superficie de lo que puede hacer con Playwright y Scraping Browser de Bright Data, una solución de navegador proxy centrada en desbloquear la recopilación de datos de sitios web que utilizan técnicas avanzadas de detección antibot. Los fundamentos tratados en este artículo pueden combinarse en flujos de trabajo más avanzados para automatizar cosas como la comparación de precios, el análisis de mercado y la generación de clientes potenciales.
Entre bastidores, Bright Data utiliza una infraestructura de proxy completa para dirigir sus solicitudes a través de un conjunto de millones de IP. Esto le permite raspar datos de sitios web sin bloqueos o vetos. Regístrese para una prueba gratuita y empiece a experimentar con el Scraping Browser hoy mismo.
¿Desea omitir el raspado de sitios web de eCommerce y sólo obtener datos? Adquiera conjuntos de datos de eCommerce.