Maneira simples de extrair valor do HTML

2

Eu tenho um arquivo html muito simples com um valor interno. O valor é 57 neste caso.

<eta version="1.0"><value uri="/user/var/48/10391/0/0/12528" strValue="57" unit="%" decPlaces="0" scaleFactor="10" advTextOffset="0">572</value></eta>

O que é uma maneira fácil de extrair e escrever em uma variável? Existe uma maneira de nem mesmo exigir um wget em um arquivo como uma etapa intermediária, de modo a não precisar abrir e usar um arquivo onde ele está armazenado, mas trabalhar diretamente com o wget?

Para esclarecer, eu poderia fazer um simples wget , salvar em um arquivo e verificar o arquivo para o valor ou há uma maneira ainda mais aprimorada de fazer o wget em algum lugar na RAM e não exigir um arquivo explícito ser armazenado?

Obrigado um milhão de vezes, muito apreciado Norbert

    
por njordan 12.11.2014 / 22:34

4 respostas

10

Você pode extrair um valor no seu exemplo com grep e atribuí-lo à variável da seguinte maneira

$ x=$(wget -0 - 'http://foo/bar.html' | grep -Po '<value.*strValue="\K[[:digit:]]*')
$ echo $x
57

Explicação:

  • $() : substituição de comando
  • grep -P : grep com Perl regexp ativado
  • grep -o : grep mostra apenas a parte da linha
  • \K : não mostra na saída nada do que foi correspondido até este ponto
  • wget -O - : imprime documento baixado na saída padrão (não em arquivo)

No entanto, para uma abordagem geral, é melhor usar um analisador dedicado para o código html.

    
por 12.11.2014 / 22:49
4

Eu não tenho ideia do que wget você está falando, mas estou supondo que você deseja baixar o arquivo. Se sim, você pode baixá-lo e analisá-lo sem nenhum arquivo temporário intermediário:

$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57
    
por 13.11.2014 / 00:29
1
  1. Além da técnica wget -O - ... , você também pode usar curl -Ss ... para evitar o incômodo de um arquivo temporário.

  2. Apresentamos a seguir o uso de pup ( link ), que suporta uma linguagem de consulta baseada em CSS.

a) Para extrair o valor "text" da tag <value> :

pup 'value text{}'  # yields 572

b) Para extrair o valor do atributo strValue da tag <value> :

pup 'value attr{strvalue}' # yields 57
    
por 21.06.2017 / 09:42
-2
cat input | grep -o strValue=".*" | sed 's/strValue=//g' | sed 's/"//g'
    
por 12.11.2014 / 22:36