es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CheerioJS para analizar datos en la etiqueta de script

He estado tratando de analizar los datos que están en la etiqueta de script usando cheerio, sin embargo, ha sido difícil por las siguientes razones.

  • No puedo analizar la cadena que se genera en JSON debido a html-entities.

Más información:

  • También lo que me resulta extraño es que tienes que volver a cargar el contenido en cheerio una segunda vez para obtener el texto.

Siéntete libre de hacer un fork de este replit o copiar y pegar el código para probarlo tú mismo.

const cheerio = require('cheerio')
const {decode} = require('html-entities')
const html = `
<body>

<script type="text/javascript" src="/data/common.0e95a19724a68c79df7b.js"></script>

<script>require("dynamic-module-registry").set("from-server-context", JSON.parse("\x7B\x22data\x22\x3A\x7B\x22available\x22\x3Atrue,\x22name\x22\x3A"Gracias"\x7D\x7D"));</script>

</body>
`;
const $ = cheerio.load(html, {
  decodeEntities: false,
});
const text = $('body').find('script:not([type="text/javascript"])');
const cheerioText = text.eq(0).html();

// implementa una mejor manera de obtener la cadena
const scriptInfo = cheerio.load(text.eq(0).html()).text();
const regex = new RegExp(/^.<em>?JSON.parse(((?:(?!));).)</em>)/);
const testing = regex.exec(scriptInfo)[1];

// salida real:
// \x7B\x22data\x22\x3A\x7B\x22available\x22\x3Atrue,\x22name\x22\x3A"Gracias"\x7D\x7D cuando se registra
console.log(testing)

// No funciona
const json = JSON.parse(testing)


const decoding = decode(testing)
// misma salida que testing
console.log(decoding)

// No funciona
console.log('decode', JSON.parse(decoding))
//JSON
{ Data: { available: true, name: 'Gracias' } }
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Analizando Datos en la Etiqueta Script usando Cheerio

    He estado intentando analizar los datos que están en la etiqueta script usando Cheerio, pero ha sido difícil debido a las siguientes razones:

    • No puedo analizar la cadena que se genera en JSON debido a las entidades HTML.

    Además, lo que me resulta extraño es que tienes que volver a cargar el contenido en Cheerio una segunda vez para obtener el texto. El código real está disponible en el siguiente enlace de Repl.it y, si quieres, puedes hacer un fork o copiar y pegar el código para experimentar: https://replit.com/@Graciasc/Cheerio-Script-Parse

    El código involucra cargar el HTML en Cheerio, encontrar la etiqueta script que contiene los datos y, usando expresiones regulares, extraer la cadena JSON de ella. Sin embargo, como la cadena JSON está codificada usando entidades HTML, debe decodificarse usando la biblioteca de entidades HTML antes de poder ser analizada en JSON.

    Sin embargo, la decodificación parece no funcionar correctamente y no es posible analizar la cadena JSON en un objeto como resultado.

Comments are closed.