Frage
Welches Tool (vorzugsweise für Linux) kann den Inhalt eines HTML-Elements anhand seines CSS-Pfads auswählen?
Beispiel
Betrachten Sie beispielsweise das folgende HTML-Dokument:
<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>
Welches Befehlszeilenprogramm (z. B. eine Art "cssgrep") kann Werte mit einem CSS-Selektor extrahieren? Das ist:
cssgrep page.html "body > div.content > table > tbody > tr > td.data"
Das Programm würde Folgendes in die Standardausgabe schreiben:
Tabular Content 1
Tabular Content 2
ähnliche Links
- 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/
Vielen Dank!
brew install html-xml-utils
.CSS-Lösung
Der Befehl Element Finder führt diese Aufgabe teilweise aus:
Zum Beispiel:
Dadurch wird das Ergebnis im JSON-Format dargestellt, das extrahiert werden kann.
XML-Lösung
Das XML :: Twig- Modul ("
sudo apt-get install xml-twig-tools
") enthält ein Tool mit dem Namenxml_grep
, das genau das kann, vorausgesetzt, Ihr HTML ist natürlich gut geformt.Es tut mir leid, dass ich das momentan nicht testen kann, aber so etwas sollte funktionieren:
quelle
https://github.com/ericchiang/pup verfügt über eine CSS-basierte Abfragesprache, die genau Ihrem Beispiel entspricht. In der Tat, mit Ihrer Eingabe, den folgenden Befehl:
produziert:
Das Trailing
text{}
entfernt die HTML-Tags.Eine nette Funktion ist, dass nicht der vollständige Pfad angegeben werden muss, so dass noch einmal mit Ihrem Beispiel:
Ein Vorteil
pup
ist, dass das Paket golang.org/x/net/html zum Parsen von HTML5 verwendet wird.quelle
Node kann das mit JQuery und einem gefälschten DOM tun.
Ich habe dafür ein Docker-Image erstellt ( https://hub.docker.com/r/phil294/jquery-jsdom/ ):
Das zweite Argument ist JavaScript-Code, sodass Sie wirklich alles tun können, was Sie wollen.
quelle