Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

246
Vistas
¿Cómo proteger las posiciones para colocar los datos en la hoja de cálculo cuando no se recuperan algunos valores?

Estoy usando la biblioteca CheerioGS :

Identificación → 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
Proyecto → https://github.com/tani/cheeriogs

Mi código completo (lo agregué en su totalidad para que puedan usarlo en las pruebas):

 function importdataweb() { const sheet = SpreadsheetApp.getActive().getSheetByName('Page_One'); sheet.getRange('A1:Z' + sheet.getMaxRows()).clear({contentsOnly: true, skipFilteredRows: true}); const url = 'http://www.futebolnatv.com.br/jogos-hoje/'; const contentText = UrlFetchApp.fetch(url).getContentText(); const $ = Cheerio.load(contentText); let elements = $('tbody > tr > th > h4 > b') elements.each((index, value) => { sheet.getRange(index+1, 1).setValue($(value).text().trim()) }) let elements_1 = $('tbody > tr > td > div:nth-child(1)') elements_1.each((index, value) => { sheet.getRange(index+1, 2).setValue($(value).text().trim()) }) let elements_2 = $('tbody > tr > td > div:nth-child(2)') elements_2.each((index, value) => { sheet.getRange(index+1, 3).setValue($(value).contents().last().text().trim()) }) let elements_3 = $('tbody > tr > td > div:nth-child(3)') elements_3.each((index, value) => { sheet.getRange(index+1, 4).setValue($(value).contents().last().text().trim()) }) let elements_4 = $('tbody > tr > td b:nth-child(2)') elements_4.each((index, value) => { sheet.getRange(index+1, 5).setValue($(value).text().trim()) }) }

El resultado es:
ingrese la descripción de la imagen aquí

Algunos valores en la última columna por algún motivo no se recopilan, por lo que la posición de algunos de estos valores en la hoja de trabajo está en el lugar incorrecto.

Por ejemplo: si no se recoge el primer valor pero sí el segundo, el segundo estará en la fila 1 de la columna, entonces estaría mal.

¿Cómo podría agregar un guión - en las líneas que no se recopila el valor?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

En lugar de usar Array.prototype.forEach y Range.setValue para llenar celda por celda, una columna a la vez, cree una matriz de matriz de valores y luego agregue todos los valores a la vez mediante Range.setValues .

Para hacer esto, en lugar de tomar una celda ( td ) de todas las tablas ( tbody ) a la vez, tome la tabla completa ( tbody ) y verifique si existe la celda/contenido requerido, si no, agregue una cadena vacía ( '' ) a la posición correspondiente en el Array que se está construyendo.

Recursos

  • https://developers.google.com/apps-script/guides/support/best-practices?hl=en
about 4 years ago · Juan Pablo Isaza Denunciar

0

Desea iterar esos tr. Esto dará una matriz 2d (no probada)

 $('tr').get().map(tr => $(tr).find("h4,.col-md-12").get().map(el => $(el).text()))
about 4 years ago · Juan Pablo Isaza Denunciar

0

let data = []; let rows = $('tbody > tr'); rows.each((i, row) => { const newDataRow = [ $(row).find('th > h4 > b').text().trim(), $(row).find('td > div:nth-child(1)').text().trim(), $(row).find('td > div:nth-child(2)').contents().last().text().trim(), $(row).find('td > div:nth-child(3)').contents().last().text().trim(), $(row).find('td b:nth-child(2)').text().trim(), ]; data.push(newDataRow); }); // fill empty values data = data.map(row => row.map(el => el ? el : '-')); // write values to sheet const startRow = 1; const startCol = 1; const numRows = data.length; const numCols = data[0].length; sheet.getRange(startRow, startCol, numRows, numCols).setValues(data);

Cambios realizados en parte después de cargar el objeto Cheerio:

  1. Debe recopilar todos los datos y solo luego escribirlos ( setValues ) nuevamente en la hoja en 1 solicitud, para reducir el tiempo de ejecución del script y mejorar el rendimiento.
  2. Debe hacer un bucle de filas ( let rows = $('tbody > tr') ) con Cheerio, para poder combinar los valores que necesita para cada fila para que pueda mostrarse como una fila en una hoja de cálculo.

El segundo cambio es más importante, ya que le brinda la capacidad de trabajar con sus datos por fila más tarde, como ordenar, filtrar, etc.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda