Linuxコマンドラインツールを使用して、Webページからhtmlタグとその属性を取得しようとしています。具体的なケースは次のとおりです。
タスクは次のとおりです。ウェブサイト「clojurescript.net」のすべての「script」タグのすべての「src」属性を取得します。これは、grepを使用してテキストの一部の行をフェッチするのとほぼ同じくらい簡単な、できるだけ少ない式で行う必要があります。
curl -L clojurescript.net | [the toolchain in question "script @src"]
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
[...further results]
私が試したツールは、hxnormalize/hxselect、tidy、xmlstarletです。何もなければ、信頼できる結果を得ることができませんでした。複数のプログラミング言語のライブラリを使用する場合、このタスクは常に簡単でした。
属性を抽出するだけの追加オプションとともにCSSセレクターを使用しても問題ありません。しかし、おそらくXPATHがこのためのより良い選択構文かもしれません。
と
curl "http://clojurescript.net/" | scrape -be '//body/script' | xml2json | jq '.html.body.script[].src
あなたが持っている
"http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"
"http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js"
"http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js"
"http://kanaka.github.io/cljs-bootstrap/web/repl-web.js"
"http://kanaka.github.io/cljs-bootstrap/web/repl-main.js"
ツールは次のとおりです。
またはと:
curl "http://clojurescript.net/" | hxnormalize -x | hxselect -i 'body > script' | grep -oP '(http:.*?)(")' | sed 's/"//g'
あなたが持っている:
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
http://kanaka.github.io/cljs-bootstrap/web/repl-web.js
http://kanaka.github.io/cljs-bootstrap/web/repl-main.js
HTMLを解析するためのスタンドアロンユーティリティを知りません。 XMLにはユーティリティがありますが、どれも使いやすいとは思いません。
多くのプログラミング言語には、HTMLを解析するためのライブラリがあります。ほとんどのUnixシステムにはPerlまたはPythonがあります。 Pythonの BeautifulSoup またはPerlの HTML :: TreeBuilder を使用することをお勧めします。もちろん、別の言語を使用することもできます( nokogiri Rubyなど)
ダウンロードと解析を組み合わせたPythonワンライナー)は次のとおりです。
python2 -c 'import codecs, sys, urllib, BeautifulSoup; html = BeautifulSoup.BeautifulSoup(urllib.urlopen(sys.argv[1])); sys.stdout.writelines([e["src"] + "\n" for e in html.findAll("script")])' http://clojurescript.net/
または、より読みやすい数ライナーとして:
python2 -c '
import codecs, sys, urllib, BeautifulSoup;
html = BeautifulSoup.BeautifulSoup(urllib.urlopen(sys.argv[1]));
scripts = html.findAll("script");
for e in scripts: print(e["src"])
' http://clojurescript.net/
Nokogiri 優れたコマンドライン機能があります:
curl -Ls http://clojurescript.net/ | nokogiri -e 'puts $_.css("script").map{|e|e.attr("src")}'
http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
http://kanaka.github.io/cljs-bootstrap/web/jqconsole.min.js
http://kanaka.github.io/cljs-bootstrap/web/jq_readline.js
http://kanaka.github.io/cljs-bootstrap/web/repl-web.js
http://kanaka.github.io/cljs-bootstrap/web/repl-main.js
これにより、探している単一のコマンドラインツールのシンプルさと、慣れ親しんだプログラミング言語を使用する簡単なアプローチを組み合わせることができます。