Estoy tratando de raspar web https://liquipedia.net/dota2/Admiral esta página para todas las etiquetas <li>
que están dentro de una etiqueta <ul>
que nuevamente está dentro de un div con clase mw-parser-output
que tiene el title
de propiedad. (Creo que así se llaman en el mundo HTML, como <tag property="...">
).
¿Cuál sería la forma más elegante y sencilla de hacer esto con Cheerio? Sé que podría hacer esto con algunos bucles for y otras cosas, pero si hubiera una forma sencilla de hacerlo, mi código sería mucho más limpio.
Estoy seguro de que Cheerio es como jQuery. Un simple selector como este debería hacer:
const li = $('div.mw-parser-output > ul > li[title]').toArray(); // Optionaly turn selected items into an array
Explicación del selector de CSS:
div.mw-parser-output
div
se asegura de que el elemento sea ese. El punto significa que el selector es una class
.>
Señala al niño inmediatoul
Etiqueta ul
simpleli[title]
Cualquier etiqueta li
, pero debe tener el atributo de título. Luego convertimos el resultado en una matriz para que sea utilizable.
Es tan simple como eso.
También puede obtener una matriz del texto de cada elemento li
con lo siguiente:
const arrayOfLiTexts = li.map($el => $el.text());
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
const elements = $('div[title].mw-parser-output ul li').toArray();