Questão
Qual ferramenta (de preferência para Linux) pode selecionar o conteúdo de um elemento HTML com base em seu caminho CSS?
Exemplo
Por exemplo, considere o seguinte 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>
Que programa de linha de comando (por exemplo, um tipo de "cssgrep") pode extrair valores usando um seletor de CSS? Isso é:
cssgrep page.html "body > div.content > table > tbody > tr > td.data"
O programa escreveria o seguinte na saída padrão:
Tabular Content 1
Tabular Content 2
Links Relacionados
- 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/
Obrigado!
brew install html-xml-utils
,.Solução CSS
O comando Localizador de elementos realizará parcialmente esta tarefa:
Por exemplo:
Isso renderiza o resultado no formato JSON, que pode ser extraído.
Solução XML
O módulo XML :: Twig ("
sudo apt-get install xml-twig-tools
") vem com uma ferramenta chamadaxml_grep
capaz de fazer exatamente isso, desde que seu HTML seja bem formado, é claro.Sinto muito por não poder testar isso no momento, mas algo assim deve funcionar:
fonte
https://github.com/ericchiang/pup possui uma linguagem de consulta baseada em CSS que está em conformidade com o seu exemplo. De fato, com sua entrada, o seguinte comando:
produz:
O final
text{}
remove as tags HTML.Um recurso interessante é que o caminho completo não precisa ser fornecido, de modo que novamente com o seu exemplo:
Uma vantagem
pup
disso é que ele usa o pacote golang.org/x/net/html para analisar o HTML5.fonte
O nó pode fazer isso com o JQuery e um DOM falso.
Fiz uma imagem do Docker para isso ( https://hub.docker.com/r/phil294/jquery-jsdom/ ):
O segundo argumento é o código JavaScript, para que você possa realmente fazer o que quiser.
fonte