Pregunta
¿Qué herramienta (preferiblemente para Linux) puede seleccionar el contenido de un elemento HTML en función de su ruta CSS?
Ejemplo
Por ejemplo, considere el siguiente documento HTML:
<html>
<body>
<div class="header">
<h1>Header</h1>
</div>
<div class="content">
<table>
<tbody>
<tr><td class="data">Tabular Content 1</td></tr>
<tr><td class="data">Tabular Content 2</td></tr>
</tbody>
</table>
</div>
<div class="footer">
<p>Footer</p>
</div>
</body>
</html>
¿Qué programa de línea de comandos (por ejemplo, una especie de "cssgrep") puede extraer valores usando un selector CSS? Es decir:
cssgrep page.html "body > div.content > table > tbody > tr > td.data"
El programa escribiría lo siguiente en la salida estándar:
Tabular Content 1
Tabular Content 2
enlaces relacionados
- https://getfirebug.com/wiki/index.php/Command_Line_API#.24.24.28selector.29
- https://stackoverflow.com/questions/7334942/is-there-something-like-a-css-selector-or-xpath-grep
- https://github.com/keeganstreet/element-finder
- http://www.w3.org/Tools/HTML-XML-utils/
¡Gracias!
brew install html-xml-utils
.Solución CSS
El comando Buscador de elementos realizará parcialmente esta tarea:
Por ejemplo:
Esto representa el resultado en formato JSON, que se puede extraer.
Solución XML
El módulo XML :: Twig ("
sudo apt-get install xml-twig-tools
") viene con una herramienta llamadaxml_grep
que puede hacer exactamente eso, siempre que su HTML esté bien formado, por supuesto.Lo siento, no puedo probar esto en este momento, pero algo como esto debería funcionar:
fuente
https://github.com/ericchiang/pup tiene un lenguaje de consulta basado en CSS que se ajusta estrechamente a su ejemplo. De hecho, con su entrada, el siguiente comando:
produce:
El final
text{}
elimina las etiquetas HTML.Una buena característica es que no es necesario dar la ruta completa, de modo que nuevamente con su ejemplo:
Una ventaja de esto
pup
es que utiliza el paquete golang.org/x/net/html para analizar HTML5.fuente
Node puede hacer eso con JQuery y un DOM falso.
Hice una imagen de Docker para eso ( https://hub.docker.com/r/phil294/jquery-jsdom/ ):
El segundo argumento es el código JavaScript, por lo que puede hacer lo que quiera, de verdad.
fuente