En este sitio web, https://finance.yahoo.com/quote/ANZ.AX/ finanzas: estoy tratando de extraer el valor de "EPS básico" de la columna de 2017, en la celda J12 (hojas de Google).

Tengo el código de cotización ANZ.AX en la celda C12.

En J12 tengo la fórmula:

=EPSGROWTH("https://finance.yahoo.com/quote/"&C12&"/financials")

El script de CRECIMIENTO es donde tengo un problema, ya que normalmente 'xxxx' ha sido una cadena única en el html para coincidir, pero en este caso es 'fin-col' que aparece en todas partes de la página.

function EPSGROWTH(url) {
  const res = UrlFetchApp.fetch(url).getContentText().match(/xxxx.+?>(.+?)</);
  return res && res.length > 1 ? res[1] : "No value";
}

¿Es porque esta es una mesa dentro de una mesa? (de cualquier forma no conozco la solución)

Obviamente, podría estar muy lejos de mi enfoque, pero espero que la solución sea simple para alguien nuevo en la codificación :)

Cualquier ayuda es bienvenida y muy apreciada. Saludos T

1
Auckland_Ted 12 may. 2021 a las 01:41

1 respuesta

La mejor respuesta

En este caso, ¿qué tal recuperar directamente los valores de los datos JSON que se utilizan con Javascript? Este es el hilo relacionado. Ref. Cuando se modifica su secuencia de comandos, se convierte en lo siguiente.

Script modificado:

function EPSGROWTH(url) {
  const res = UrlFetchApp.fetch(url).getContentText().match(/"annualBasicEPS":(\[.+?])/);
  if (res && res.length > 1) {
    const obj = JSON.parse(res[1]).filter(e => e && e.asOfDate && e.asOfDate.includes("2017"));
    return obj.length > 0 ? obj[0].reportedValue.fmt : "No value"; // or obj[0].reportedValue.raw
  }
  return "No value";
}
  • En este caso, parece que cuando se usa obj[0].reportedValue.raw en lugar de obj[0].reportedValue.fmt, se puede recuperar el valor bruto.

Resultado:

Cuando se utiliza el script modificado anterior, se convierte en el siguiente.

enter image description here

Referencias:

1
Tanaike 11 may. 2021 a las 23:39