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' } }
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:
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.