7

シェル スクリプトで、かなり単純な Web ページの情報を解析しようとしています。私が現在取り組んでいる Web ページは、ここで生成されます。たとえば、インターネット サービス プロバイダーに関する情報をシェル変数にプルしたいと考えています。この目的には、プログラム xmllint、XMLStarlet、または xpath のいずれかを使用するのが理にかなっている場合があります。私はシェル スクリプトに精通していますが、XPath 構文と XPath 構文を実装するために使用されるユーティリティについては初めてなので、正しい方向へのポインタをいくつか教えていただければ幸いです。

シェルスクリプトの始まりは次のとおりです。

HTMLISPInformation="$(curl --user-agent "Mozilla/5.0" http://aruljohn.com/details.php)"
# ISP="$(<XPath magic goes here.>)"

便宜上、オンラインで XPath 構文を動的にテストするためのユーティリティを次に示します。

http://www.bit-101.com/xpath/

4

5 に答える 5

8

迅速で汚い解決策...

xmllint --html -xpath "//table/tbody/tr[6]/td[2]" page.html

Chrome と開発者ツールを使用して、ノードの xpath を見つけることができます。ノードを検査するときは、ノードを右クリックして [XPath のコピー] を選択します。

私はこれをあまり使用しません。これはあまり信頼できません。

ページ上のすべての情報は別の場所で見つけることができます: たとえば、自分の IP で whois を実行します...

于 2012-12-26T21:16:02.467 に答える
5

私の Xidelを使用できます。cli の html ページから値を抽出することが主な目的です。これは標準ツールではありませんが、依存関係のない単一のバイナリであり、root にならなくてもインストール/実行できます。

他のプログラムを介さずに、Web ページから値を直接読み取ることができます。

XPath の場合:

 xidel http://aruljohn.com/details.php -e '//td[text()="Internet Provider"]/following-sibling::td'

またはパターンマッチングを使用:

 xidel http://aruljohn.com/details.php -e '<td>Internet Provider</td><td>{.}</td>' --hide-variable-names
于 2012-12-26T21:13:02.017 に答える
3

PhantomJsの使用を検討してください。これは、Web ページで JavaScript/CoffeeScript を実行できるヘッドレス WebKit です。あなたの問題を解決するのに役立つと思います。

Pjscrapeは、PhantomJs に基づく便利な Web スクレイピング ツールです。

于 2012-12-26T20:08:18.713 に答える
3

xpup

XML

Go で記述されたコマンドライン XML 解析ツール。例えば:

$ curl -sL https://www.w3schools.com/xml/note.xml | xpup '/*/body'
Don't forget me this weekend!

また:

$ xpup '/note/from' < <(curl -sL https://www.w3schools.com/xml/note.xml)
Jani

HTML

HTML ページを解析する例を次に示します。

$ xpup '/*/head/title' < <(curl -sL https://example.com/)
Example Domain

インストール

インストール方法: go get github.com/ericchiang/xpup.


pup

HTML 解析については、 を試してくださいpup。例えば:

$ pup 'title text{}' -f <(curl -sL https://example.com/)
Example Domain

関連するXPath の Feature Request を参照してください。

インストール

インストール方法: go get github.com/ericchiang/pup.

于 2018-04-11T21:10:33.227 に答える