Analisando uma página HTML com o Bash

1

Estou tentando escrever um script Bash que extrairá informações de uma página HTML (usando wget ). Eu sei que minhas informações estarão entre <h*> tags, mas há uma boa maneira de obtê-las?

Para ser mais preciso, vamos dar um exemplo:

< h1>header1< /h1>
< h2>header2< /h2>
< h2>otherHeader2< /h2>
< h1>lastHeader1< /h1>
< h2>lastHeader2< /h2>

Gostaria de extrair "otherHeader2", a.k.a., o segundo (mas poderia estar em qualquer lugar) cabeçalho no cabeçalho1.

    
por NorTicUs 06.10.2012 / 01:04

2 respostas

1

este é um simples script python que irá analisar seu html e colocar todos os valores em uma lista e imprimi-lo. Você pode escrever o resto do seu script em python, ou chamar este script de python, ou conectar este pequeno código como um trecho no bash. Confira os exemplos abaixo.

test.html

< h1>header1< /h1>
< h2>header2< /h2>
< h2>otherHeader2< /h2>
< h1>lastHeader1< /h1>
< h2>lastHeader2< /h2>

parse_header.py

#!/usr/bin/env python
import sys, re
print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())
O script

pode ser chamado a partir do bash

cat test.html | parse_header.py

código python pode ser colocado no script bash

cat test.html | python -c "import sys, re;print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())"

a última opção que acredito não é muito legível no seu caso. Faz mais sentido se você tem algum código simples onde não vale a pena colocá-lo em seu próprio script.

    
por Marwan Alsabbagh 06.10.2012 / 06:03
2

Você nunca deve analisar html com expressões regulares. Sempre use um analisador html ou xml adequado. Por exemplo, usando xmlstarlet :

$ xmlstarlet sel -t -v '//h2[2]' html.html 
otherHeader2
    
por glenn jackman 06.10.2012 / 15:43