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_grepque 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
pupes 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