web-dev-qa-db-ja.com

HTMLから値を抽出する簡単な方法

内部に値を持つ非常に単純なhtmlファイルがあります。この場合、値は57です。

<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>

変数を抽出して書き込むための簡単なbashスクリプトの方法は何ですか?それが格納されているファイルを開いて使用する必要がなく、直接wgetを操作する必要がないように、中間ステップとしてファイルにwgetを要求しない方法はありますか?

明確にするために、単純なwgetを実行してファイルに保存し、ファイルの値を確認するか、またはwgetをRAMのどこかに実行し、明示的な保存するファイル?

100万回ありがとう、高く評価されているNorbert

2
njordan

次の方法で、grepを使用して例の値を抽出し、変数に割り当てることができます

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

説明:

  • $():コマンド置換
  • _grep -P_:Perl正規表現を有効にしたgrep
  • _grep -o_:grepは行の一致したpartのみを表示します
  • _\K_:この時点までに何が一致したかを出力に表示しません
  • _wget -O -_:ダウンロードしたドキュメントを標準出力(ファイルではなく)に出力します

ただし、一般的なアプローチでは、HTMLコードに専用のパーサーを使用することをお勧めします。

10
jimmij

wgetについて何を話しているのかはわかりませんが、ファイルをダウンロードする必要があると思います。もしそうなら、はい、あなたはそれをダウンロードして、中間の一時ファイルなしでそれを解析することができます:

$ value=$(wget -O - http://example.com/file.html | grep -oP 'strValue="\K[^"]+')
$ echo $value
57
4
terdon
  1. wget -O - ...テクニックとは別に、curl -Ss ...を使用して一時ファイルの煩わしさを回避することもできます。

  2. 以下は、CSSベースのクエリ言語をサポートするpuphttps://github.com/ericchiang/pup )の使用法を示しています。

a)<value>タグの「テキスト」値を抽出するには:

pup 'value text{}'  # yields 572

b)<value>タグのstrValue属性の値を抽出するには:

pup 'value attr{strvalue}' # yields 57
2
peak