ホームページ >ウェブフロントエンド >htmlチュートリアル >xpath を使用して html を解析するパーサー: Jsoupxpath_html/css_WEB-ITnose
JsoupXpath は、xpath を使用して HTML を解析する純粋に Java で開発されたパーサーですが、十分強力な xpath パーサーが見つからないため、JsoupXpath が開発されました。 JsoupXpath の実装ロジックは明確で、拡張が簡単で、一般的に使用されるほぼすべての xpath 構文をサポートしています
ここではフレームワーク間の比較はリストしませんが、使用後は JsoupXpath が最も強力であることがわかると思います。 1 つは現在市場にある Xpath パーサーです。
Maven を使用するのが不便な場合は、lib の下にある依存関係パッケージを直接使用して実行してみることもできます。便利な場合は、次の依存関係を直接使用できます (中央の Maven ライブラリにアップロード済み)。最新バージョン 0.1.1):
http://www.cnblogs.com/ 为例"//a/@href";"//div[@id='paging_block']/div/a[text()='Next >']/@href";"//div[@id='paging_block']/div/a[text()*='Next']/@href";"//h1/text()";"//h1/allText()";"//h1//text()";"//div/a";"//div[@id='post_list']/div[position()<3]/div/h3/allText()";"//div[@id='post_list']/div[first()]/div/h3/allText()";"//div[@id='post_list']/div[1]/div/h3/allText()";"//div[@id='post_list']/div[last()]/div/h3/allText()";//查找评论大于1000的条目(当然只是为了演示复杂xpath了,谓语中可以各种嵌套,这样才能测试的更全面嘛)"//div[@id='post_list']/div[./div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";//轴支持"//div[@id='post_list']/div[self::div/div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";"//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()";"//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()|//div[@id='post_list']/div[1]/div/h3/allText()";
依存関係を構成したら、次の例を使用してそれを体験できます。
<dependency> <groupId>cn.wanghaomiao</groupId> <artifactId>JsoupXpath</artifactId> <version>0.1.1</version></dependency>
他の例は cn.wanghaomiao.example パッケージにあります
標準 xpath 構文をサポート (述語のネストをサポート)、一般的に使用されるすべての関数をサポート、一般的に使用されるすべての軸をサポート、いくつかの派手な関数と関数を削除標準軸については、以下で詳しく説明します。構文については、http://www.w3school.com.cn/xpath/index.asp を参照してください。
Firefox や chrome などのブラウザで生成された Xpath を直接貼り付けることはあまりお勧めできませんページをレンダリングします。たとえば、table タグは、この方法で生成された Xpath パスが最も汎用的ではないため、値が自動的に追加されない可能性があります。得られる。したがって、Xpath を使用し、Xpath の威力と、Xpath がもたらす利便性と優雅さを実感する最善の方法は、Xpath の標準構文を学習することです。これにより、さまざまな問題に簡単に対処し、Xpath の真の力を享受できるようになります。
Function
text() ノード自身のテキストを抽出します
node() すべてのノードを抽出します
position() 兄弟間の現在のノードの位置を返します
last() Return s兄弟ノードの最後のノード
first() 兄弟ノードの最初のノードを返します
allText() ノードの下のすべてのテキストを抽出し、同様の / /div/h3// を置き換えますtext() この再帰的なテキストの使用法
html() はすべてのノードの内部 HTML を取得します
outerHtml() はノード自体を含むすべてのノードのすべての HTML を取得します
num() はすべての数値を抽出しますノード自体のテキスト (つまり、子ノード以外に含まれるテキスト) に、読み取り数、コメント数、価格などの数値が 1 つしかないことがわかっている場合。 、その後、この番号を直接抽出できます。複数の番号がある場合は、最初に一致した連続番号が抽出されます。
contains(arga,argb) JsoupXpath には強力な演算子サポートがあり、完全に置き換えることができるため、この関数は一時的にサポートされていません。たとえば、 contains() の代わりに *= を使用できます。 例: //div[text()*='next']
self ノード自体
parent 親ノード
child 直接 子ノード
ancestor すべての祖先ノード 父、祖父、祖父の父...
ancestor-or-self すべての祖先ノードと自己ノード
descendant すべての子孫ノード 息子、孫、孫の息子...軸 実用的な拡張
preceding-sibling-one 前の兄弟ノード (拡張)
following-sibling-one 次の兄弟ノード (拡張) に戻る 構文
sibling すべての兄弟 (拡張)
a=b それらが等しいかどうかを判断し、ブール値を返します
a ! =b return Boolean と等しくない
a>b return Boolean
a>=b return Boolean
a
a<=b 以下 Boolean を返す
演算子展開
a^=b string a が string b で始まるかどうか a startwith b は Boolean を返す
a*=b a に b が含まれるかどうか, a に b が含まれる場合は Boolean が返されます
a$=b a a が b で終わるかどうか a endwith b Boolean が返されます
基本的にはこれで十分ですが、その他の役に立たないものは当面サポートされません。特別なニーズがある場合は、ご連絡ください。プロジェクトのアドレス: GitHub/Jsoupxpath
プロジェクトのホームページ: http://www.open-open.com/lib/view/home/1445699703570