Question
Quel outil (de préférence pour Linux) peut sélectionner le contenu d'un élément HTML en fonction de son chemin CSS?
Exemple
Par exemple, considérez le document HTML suivant:
<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>
Quel programme de ligne de commande (par exemple, une sorte de "cssgrep") peut extraire des valeurs à l'aide d'un sélecteur CSS? C'est:
cssgrep page.html "body > div.content > table > tbody > tr > td.data"
Le programme écrirait ce qui suit sur la sortie standard:
Tabular Content 1
Tabular Content 2
Liens connexes
- https://getfirebug.com/wiki/index.php/Command_Line_API#.24.24.28selector.29
- /programming/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/
Je vous remercie!
brew install html-xml-utils
.Solution CSS
La commande Element Finder accomplira partiellement cette tâche:
Par exemple:
Cela rend le résultat au format JSON, qui peut être extrait.
Solution XML
Le module XML :: Twig ("
sudo apt-get install xml-twig-tools
") est livré avec un outil nomméxml_grep
qui est capable de faire exactement cela, à condition que votre HTML soit bien formé, bien sûr.Je suis désolé de ne pas pouvoir tester cela pour le moment, mais quelque chose comme ça devrait fonctionner:
la source
https://github.com/ericchiang/pup possède un langage de requête basé sur CSS qui se conforme étroitement à votre exemple. En fait, avec votre entrée, la commande suivante:
produit:
La fin
text{}
supprime les balises HTML.Une caractéristique intéressante est que le chemin complet n'a pas besoin d'être donné, de sorte que, avec votre exemple:
Un avantage
pup
est qu'il utilise le package golang.org/x/net/html pour analyser HTML5.la source
Node peut le faire avec JQuery et un faux DOM.
J'ai créé une image Docker pour cela ( https://hub.docker.com/r/phil294/jquery-jsdom/ ):
Le deuxième argument est le code JavaScript, donc vous pouvez vraiment faire tout ce que vous voulez.
la source