Business process automation expert
¡Desbloquee el poder de los datos web sin necesidad de conocimientos avanzados de programación! Este tutorial demuestra cómo extraer información de sitios web sin esfuerzo y directamente en Hojas de Cálculo de Google usando Google Apps Script, abriendo un mundo de posibilidades para las empresas. Automatice la investigación de mercado, el análisis de la competencia y la recopilación de datos, ahorrando innumerables horas de trabajo manual y obteniendo información valiosa, todo sin necesidad de un amplio conocimiento de HTML.
La extracción de datos de la web es similar a copiar y pegar información de sitios web automáticamente. Imagine tener un asistente digital que visita sitios web y recopila automáticamente información específica. En lugar de seleccionar y copiar manualmente texto o imágenes, un programa realiza esta tarea por usted, recopilando datos como precios, detalles de productos o información de contacto.
Estos datos extraídos se pueden utilizar para diversos fines, como comparar precios entre diferentes minoristas en línea, recopilar clientes potenciales, crear notificaciones sobre cambios de contenido y más. Esencialmente, la extracción de datos de la web automatiza el tedioso trabajo manual, ahorrando una cantidad significativa de tiempo y esfuerzo al extraer y organizar de manera eficiente grandes cantidades de datos web.
En el competitivo entorno empresarial actual, la productividad y la asignación optimizada de recursos son cruciales para el éxito. La extracción de datos de la web es una herramienta valiosa para alcanzar estos objetivos, mejorando significativamente la productividad al automatizar la recopilación y el análisis de datos que consumen mucho tiempo.
Al automatizar la extracción de datos de sitios web, las empresas ahorran un tiempo y esfuerzo considerables en comparación con los métodos manuales. Esta mayor eficiencia permite a los equipos centrarse en iniciativas estratégicas en lugar de tareas repetitivas.
Además, los datos recopilados mediante la extracción de datos de la web no son simplemente un fin en sí mismos; sirven como entrada crucial para procesos de automatización posteriores. Por ejemplo, los datos extraídos pueden impulsar estrategias de precios dinámicas basadas en la competencia en el comercio electrónico o identificar automáticamente oportunidades de inversión valiosas al agregar listados de bienes raíces de múltiples portales.
Esta integración perfecta con otros flujos de trabajo de automatización amplifica el impacto de la extracción de datos de la web, convirtiéndola en un activo indispensable para cualquier empresa con visión de futuro.
Google Apps Script es un lenguaje de scripting basado en la nube y construido sobre JavaScript que le permite automatizar tareas y crear potentes integraciones dentro de Google Workspace (anteriormente G Suite). Su ventaja única radica en su capacidad para conectar sin problemas varios servicios de Google, incluidos Gmail, Docs, Drive, Calendar y, lo que es más importante, Sheets, lo que lo hace excepcionalmente adecuado para crear automatizaciones integrales. Esta interconexión le permite crear flujos de trabajo que abarcan múltiples aplicaciones, agilizando los procesos e impulsando la productividad.
Específicamente para la extracción de datos de la web, el servicio UrlFetchApp
de Apps Script le permite obtener contenido directamente de las páginas web, lo que permite la extracción automatizada de datos y la integración con el resto de sus aplicaciones de Google Workspace. Al enviar solicitudes HTTP a sitios web, puede recuperar datos HTML, XML o JSON. Estos datos extraídos luego se pueden analizar y estructurar usando JavaScript dentro del script.
El verdadero poder de este enfoque se materializa cuando se combina con Hojas de Cálculo de Google: los datos extraídos se pueden escribir directamente en hojas de cálculo, proporcionando un entorno conveniente y familiar para el almacenamiento, la organización, el análisis, la visualización y la automatización adicional de los datos.
Crearemos un sistema que haga lo siguiente:
Primero, necesita una Hoja de Cálculo de Google. Su Hoja de Cálculo de Google debe tener al menos dos columnas:
Aquí puede encontrar una plantilla para la hoja de cálculo.
El siguiente paso crucial para su herramienta de extracción de datos es decirle exactamente qué parte de información debe tomar de la página web. Aquí es donde entra en juego el selector CSS.
Piense en un selector CSS como una dirección para un elemento específico en una página web, como el precio, el título de un producto o el recuento de reseñas. A continuación, le indicamos cómo puede encontrar fácilmente esta dirección utilizando el navegador Chrome:
¡Eso es todo! El selector CSS para ese elemento específico ahora está copiado en su portapapeles. Este es el valor que luego pegaría en la Columna C de su Hoja de Cálculo de Google para esa URL de producto, diciéndole a su script de extracción exactamente qué buscar en esa página.
Ahora, veamos el código que hace la magia. Abra el editor de secuencias de comandos en su Hoja de Cálculo de Google yendo a “Herramientas” > “Editor de secuencias de comandos”. Copie y pegue el código proporcionado a continuación en el editor de secuencias de comandos.
/**
* Fetches product prices from URLs in a Google Sheet and updates the sheet with the prices.
*/
// Configuration (Update these with your actual values)
const SHEET_ID = `YOUR_SHEET_ID`; // Replace with your actual Sheet ID
const SHEET_NAME = `YOUR_SHEET_NAME`; // Replace with your actual Sheet Name
const URLS_COLUMN_ID = 1; // Column containing URLs (A = 1)
const CSS_SELECTOR_COLUMN = 2; // Column containing CSS selectors (B = 2)
const PRICE_COLUMN = 3; // Column to write prices (C = 3)
const REQUEST_DELAY = 1000; // Delay between requests in milliseconds (1 second)
/**
* Main function to run the script.
*/
function main() {
const urlData = getUrlsFromSheet();
if (urlData.length === 0) {
Logger.log("No URLs to process.");
return;
}
const prices = [];
for (let i = 0; i < urlData.length; i++) {
const url = urlData[i].url;
const selector = urlData[i].selector;
const html = fetchHtml(url);
const price = extractPrice(html, selector);
prices.push(price);
Utilities.sleep(REQUEST_DELAY); // Delay between requests
Logger.log(`Processed URL ${i+1}/${urlData.length}: ${url}, Price: ${price}`);
}
updateSheet(prices);
}
/**
* Opens the spreadsheet and gets the URLs and selectors.
* @return {Array<{url: string, selector: string}>} An array of objects containing URLs and selectors.
*/
function getUrlsFromSheet() {
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
if (lastRow < 2) return []; // Handle empty sheet
const urls = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1)
.getValues()
.flat(); // Get values as a 1D array.
const selectors = sheet.getRange(2, CSS_SELECTOR_COLUMN, lastRow - 1)
.getValues()
.flat(); // Get values as a 1D array.
const urlData = [];
for (let i = 0; i < urls.length; i++) {
urlData.push({
url: urls[i],
selector: selectors[i]
});
}
return urlData;
}
/**
* Fetches the HTML content of a URL.
* @param {string} url The URL to fetch.
* @return {string|null} The HTML content, or null if there's an error.
*/
function fetchHtml(url) {
try {
const options = {
method: 'get',
muteHttpExceptions: true,
headers: { // Added some common headers
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.9',
'Cache-Control': 'no-cache'
}
};
const response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
return response.getContentText();
} else {
Logger.log(`Error fetching ${url}: ${response.getResponseCode()} - ${response.getContentText()}`);
return null;
}
} catch (error) {
Logger.log(`Error fetching ${url}: ${error}`);
return null;
}
}
/**
* Extracts the price from the HTML using Cheerio.
* @param {string} html The HTML content.
* @param {string} selector The CSS selector to use.
* @return {number|null} The extracted price as a number, or null if not found.
*/
function extractPrice(html, selector) { // Added selector parameter
if (!html || !selector) return null; // Added check for selector
try {
const $ = Cheerio.load(html);
let priceText = $(selector).text(); // Use provided selector
if (!priceText) {
Logger.log("Price element not found using selector: " + selector);
return null;
}
priceText = priceText.replace(/,/g,'.');
let price = parseFloat(priceText.replace(/[^0-9.]/g, ''));
if (isNaN(price)) {
Logger.log("Could not parse price to a number: " + priceText);
return null;
}
return price;
} catch (error) {
Logger.log("Error extracting price: " + error);
return null;
}
}
/**
* Updates the Google Sheet with the extracted prices.
* @param {Array<number|null>} prices An array of prices to write to the sheet.
*/
function updateSheet(prices) {
if (prices.length === 0) return;
const ss = SpreadsheetApp.openById(SHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
const lastRow = sheet.getLastRow();
const urlsCount = sheet.getRange(2, URLS_COLUMN_ID, lastRow - 1).getValues().flat().length;
if (prices.length !== urlsCount) {
Logger.log(`Number of prices (${prices.length}) does not match the number of URLs (${urlsCount}).`);
return;
}
sheet.getRange(2, PRICE_COLUMN, prices.length, 1).setValues(prices.map(price => [price]));
}
Antes de comenzar a usar este código, no olvide incluir la biblioteca Cheerio. Esta biblioteca de terceros nos ayuda a procesar HTML más fácilmente y debe agregarse a nuestro proyecto manualmente. Para hacer esto:
1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
La biblioteca ahora debería aparecer en el cuadro de diálogo “Bibliotecas”.
Nuestro Google Apps Script para rastrear los precios de los productos se compone de varias funciones clave que trabajan juntas. Analicemos qué hace cada una:
1. main()
main
es el punto de entrada principal que organiza todo el proceso de obtención y actualización de precios. Llama a otras funciones en la secuencia correcta para realizar el trabajo.getUrlsFromSheet()
para obtener la lista de URL y sus selectores CSS correspondientes de su hoja de cálculo.WorkspaceHtml()
para descargar el contenido de la página web.extractPrice()
para encontrar el precio.Utilities.sleep()
) para evitar sobrecargar los sitios web.updateSheet()
para escribir todos los precios recopilados de nuevo en la hoja de cálculo.main()
como un Director de Proyecto. No realiza las tareas especializadas por sí mismo, pero conoce el objetivo general y dirige a los especialistas (getUrlsFromSheet
, WorkspaceHtml
, extractPrice
, updateSheet
) en el orden correcto, asegurando que el proyecto (seguimiento de precios) se complete paso a paso.2. getUrlsFromSheet()
SHEET_ID
).SHEET_NAME
).URLS_COLUMN_ID
).CSS_SELECTOR_COLUMN
).3. WorkspaceHtml()
url
como entrada.UrlFetchApp.fetch()
de Google Apps Script para realizar una solicitud a esa URL.User-Agent
) para que la solicitud parezca más provenir de un navegador web estándar, lo que puede ayudar a evitar ser bloqueado por algunos sitios web.null
.WorkspaceHtml()
como un Explorador Web. Usted le da una dirección (URL), y va a esa ubicación en Internet, hace una copia del plano subyacente de la página (el HTML) y le devuelve ese plano. Incluso intenta parecer un visitante habitual para evitar sospechas.4. extractPrice()
html
y el selector
como entrada.Cheerio
(que debe agregarse a su proyecto de Apps Script) para analizar el HTML, facilitando la búsqueda.selector
proporcionado para identificar el elemento HTML exacto que contiene el precio.null
. De lo contrario, devuelve el precio numérico.extractPrice()
como un Detective de Datos. Recibe un documento grande (HTML) y una pista específica (el selector CSS). Utiliza la pista para encontrar la pieza exacta de datos (el texto del precio), limpia cuidadosamente cualquier marca que lo oculte (símbolos de moneda, comas) e informa el valor numérico final encontrado.5. updateSheet()
prices
(recopilada por la función main
) como entrada.getUrlsFromSheet
).PRICE_COLUMN
), comenzando desde la segunda fila y abarcando el número necesario de filas.[[precio1], [precio2], ...]
).setValues()
.Después de pegar el código en el editor de secuencias de comandos:
main()
. Deberá autorizar el script para acceder a su Hoja de Cálculo de Google.extractPrice(html)
es la parte más específica del sitio web. La forma en que se muestran los precios en HTML varía de un sitio web a otro. Por lo tanto, es posible que deba ajustar el código dentro de esta función para que coincida con la estructura de los sitios web que está rastreando. Probablemente necesitará inspeccionar el código fuente HTML del sitio web para encontrar un selector CSS adecuado.Este sistema automatizado le ahorrará tiempo y esfuerzo al rastrear automáticamente los precios de los productos por usted. Al comprender los conceptos básicos de cómo funciona, incluso puede personalizarlo aún más para adaptarlo a sus necesidades específicas.
El último paso es programar su script para que se ejecute automáticamente todos los días a la hora deseada.
main()
.Si bien UrlFetchApp
de Google Apps Script es eficaz para muchos sitios web, puede que no sea adecuado para sitios muy protegidos que emplean medidas anti-extracción de datos, como CAPTCHAs y bloqueo de IP. Intentar eludir estas protecciones solo con Apps Script suele ser poco fiable.
La extracción de datos de dichos portales o la participación en prácticas de “sombrero negro” requiere soluciones dedicadas de terceros que utilizan técnicas como proxies rotativos y solucionadores de CAPTCHA. Ejemplos de dichos servicios incluyen Apify, Bright Data, ParseHub y Scraper API.
Es importante destacar que estos servicios a menudo se pueden integrar en los procesos de automatización de Google Workspace. Esto significa que aún puede crear un flujo de trabajo completo y automatizado dentro de su infraestructura de Workspace, incluso si es necesaria una solución de extracción de datos de terceros. Los datos extraídos por estos servicios se pueden incorporar sin problemas en Hojas de Cálculo de Google, Documentos u otras aplicaciones de Workspace utilizando sus API o webhooks. Se recomienda encarecidamente respetar los términos de servicio del sitio web y `robots.txt` y realizar la extracción de datos de manera responsable y ética.
Google Workspace impone cuotas y limitaciones a `UrlFetchApp` para evitar abusos, mantener la estabilidad del servicio y garantizar un uso justo entre todos los usuarios. Estas limitaciones son cruciales de entender al diseñar scripts de extracción de datos de la web:
UrlFetchApp
o un procesamiento complejo, podría alcanzar este límite y dejar de ejecutarse. Sin embargo, a menudo puede reiniciar el script después de que se haya detenido debido a alcanzar el límite de tiempo de ejecución, lo que le permite procesar conjuntos de datos más grandes o realizar tareas más complejas por etapas.UrlFetchApp
puede realizar dentro de plazos específicos. Estos límites están diseñados para evitar abrumar a los sitios web de destino con solicitudes. Al momento de escribir esto, las cuentas gratuitas de Google suelen tener un límite diario de alrededor de 20,000 llamadas a `UrlFetchApp`, mientras que las cuentas de Google Workspace generalmente tienen un límite mucho más alto, alrededor de 100,000 llamadas por día.UrlFetchApp.fetchAll()
permite una recuperación optimizada de múltiples URL. Este método reduce significativamente la sobrecarga en comparación con la obtención secuencial al manejar la comunicación de red de manera más eficiente, aunque las solicitudes no se ejecutan en paralelo.En resumen, la extracción de datos de la web con Google Apps Script y Hojas de Cálculo de Google ofrece una forma potente, accesible y, lo que es más importante, gratuita para que las empresas automaticen la recopilación de datos y obtengan información valiosa. Google Apps Script está disponible para su uso tanto con cuentas gratuitas de Google como con suscripciones a Google Workspace, lo que lo convierte en una solución rentable para empresas de todos los tamaños.
Además, si está utilizando Google Workspace, confiar en Apps Script para sus necesidades de extracción de datos de la web ofrece una flexibilidad e integración incomparables dentro de sus flujos de trabajo empresariales existentes. A diferencia de las soluciones rígidas de terceros que a menudo requieren integraciones complejas y procesos de transferencia de datos, Apps Script se conecta sin problemas con otras aplicaciones de Workspace.
Le animamos a explorar las posibilidades de la extracción de datos de la web con Google Apps Script y Hojas de Cálculo para sus propias necesidades empresariales y desbloquear el potencial de la recopilación automatizada de datos para mejorar la eficiencia y la ventaja estratégica. El número de escenarios donde se puede aplicar esta poderosa combinación es virtualmente infinito; desde la automatización de la investigación de mercado y el análisis de la competencia hasta la optimización de la generación de leads y la agregación de contenido, solo su imaginación limita los posibles casos de uso.
Business process automation expert
1118 Budapest, Ménesi út 24. Hungary
© 2024 bestflow. All rights reserved.