コマンドラインCSSセレクターツール


15

質問

CSSパスに基づいてHTML要素のコンテンツを選択できるツール(Linuxが望ましい)を教えてください。

たとえば、次の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>

CSSセレクターを使用して値を抽出できるコマンドラインプログラム(たとえば、「cssgrep」の一種)あれは:

cssgrep page.html "body > div.content > table > tbody > tr > td.data"

プログラムは、以下を標準出力に書き込みます。

Tabular Content 1
Tabular Content 2

関連リンク

ありがとうございました!

回答:


12

CSSセレクターを使用したコンテンツのHTML / XML解析および抽出には、W3Cツールを使用します。例えば:

hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "td.data"

望ましい出力を生成します:

Tabular Content 1
Tabular Content 2

240文字の行の長さを使用すると、長いコンテンツの要素が複数の行に分割されなくなります。hxnormalize -xコマンドを使用することができ整形式のXML文書を作成しますhxselect


2
MacOSのユーザーの場合、brew install html-xml-utils
anishpatel

7

CSSソリューション

Element Finderコマンドは、このタスクを部分的に実行します。

例えば:

elfinder -j -s td.data -x "html"

これにより、結果を抽出可能なJSON形式でレンダリングします。

XMLソリューション

XML ::小枝のモジュールは、(」sudo apt-get install xml-twig-tools「)というツールが付属していますxml_grepもちろん、あなたのHTMLがよく形成されていることを提供する、ということだけで行うことができます。

現在、これをテストすることはできませんが、次のようなものが機能するはずです。

xml_grep -t '*/div[@class="content"]/table/tbody/tr/td[@class="data"]' file.html

2

https://github.com/ericchiang/pupには、例に厳密に準拠したCSSベースのクエリ言語があります。実際、あなたの入力で、次のコマンド:

pup "body > div.content > table > tbody > tr > td.data text{}"

生成する:

Tabular Content 1
Tabular Content 2

末尾text{}はHTMLタグを削除します。

優れた機能の1つは、フルパスを指定する必要がないことです。そのため、ここでも例を示します。

$ pup 'td.data text{}' < input.html
Tabular Content 1
Tabular Content 2

利点の1つpupは、HTML5の解析にgolang.org/x/net/htmlパッケージを使用することです。


0

NodeはJQueryと偽のDOMでそれを行うことができます。

そのためのDockerイメージを作成しました(https://hub.docker.com/r/phil294/jquery-jsdom/):

docker run --rm -i phil294/jquery-jsdom '$("body > div.content > table > tbody > tr > td.data").text()' < page.html

2番目の引数はJavaScriptコードなので、本当に何でも好きなことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.