Xpath、Jsoup、Xsoup(私のJava爬虫類の2つ)
Xpathから言えば
Xpathとは
XPathはW 3 Cの標準です.最も主要な目的はXML 1である.0またはXML 1.1ドキュメントノードツリーの位置決めノードが設計されています.XPathは、ノード、ノードセット、原子値、およびノードと原子値の混合などを返す式言語です.
構文
ノードの選択
式#シキ#
説明
/
ルートノードから選択
//
選択に一致する現在のノードからドキュメント内のノードを選択し、その位置を考慮しません.
.
現在のノードを選択
..
現在のノードの親ノードの選択
@
属性の選択
≪インスタンス|Instance|emdw≫
パス式
結果
bookstore
bookstore要素のすべてのサブノードを選択します.
/bookstore
ルート要素bookstoreを選択します.注記:パスが正のスラッシュ(/)から始まる場合、このパスは常にエレメントへの絶対パスを表します.
bookstore/book
book storeに属するサブエレメントのすべてのbookエレメントを選択します.
//book
ドキュメント内のすべてのbookサブ要素を選択します.
bookstore//book
book store要素の子孫に属するすべてのbook要素を選択し、book storeの下にある場所にかかわらず選択します.
//@lang
langという名前のすべてのプロパティを選択します.
述語
式#シキ#
説明
/bookstore/book[1]
book storeサブエレメントに属する最初のbookエレメントを選択します.
/bookstore/book[last()]
book storeサブエレメントに属する最後のbookエレメントを選択します.
/bookstore/book[last()-1]
book storeサブエレメントに属する最後から2番目のbookエレメントを選択します.
/bookstore/book[position()<3]
一番前のbook store要素に属する2つのサブ要素のbook要素を選択します.
//title[@lang]
langという名前のプロパティを持つtitle要素をすべて選択します.
//title[@lang='eng']
すべてのtitle要素を選択し、engのlang属性を持つ要素を選択します.
/bookstore/book[price>35.00]
book store要素のすべてのbook要素を選択し、price要素の値は35.00より大きくする必要があります.
/bookstore/book[price>35.00]/title
book store要素のbook要素のすべてのtitle要素を選択し、price要素の値は35.00より大きくする必要があります.
不明なノードの選択
ワイルドカード
説明
*
任意の要素ノードを一致させます.
@*
アトリビュートノードを一致させます.
node()
任意のタイプのノードに一致します.
≪インスタンス|Instance|emdw≫
パス式
結果
/bookstore/*
bookstore要素のすべてのサブ要素を選択します.
//*
ドキュメント内のすべての要素を選択します.
//title[@*]
属性付きtitle要素をすべて選択します.
参照先:http://www.w3school.com.cn/xp...
これらをしばらく整理して、必要があればw 3 schoolに行って調べることができます
Jsoup
JsoupはJavaのHTML解析器で、あるURLアドレス、HTMLテキストの内容を直接解析することができます.
文字列からの解析
URLからDocumentをロード
なお、connect()メソッドは新しいConnectionオブジェクトを返すことができ、Connectionインタフェースは特殊な要求を解決するためのメソッドチェーンを提供します.具体的には、次のようにします.
URLからdomをロードすることもできます
ファイルからdomをロード
parse(File in,String charsetName,String baseUri)この方法は、HTMLファイルをロードおよび解析するために使用されます.ファイルのロード中にエラーが発生した場合は、IOExceptionを放出し、適切な処理を行う必要があります.baseUriパラメータは、ファイル内のURLsが相対パスであるという問題を解決するために使用されます.空の文字列を入力する必要がない場合.
documentを巡るapi
要素getElementById(String id)getElementsByTag(String tag)getElementsByClass(String className)getElementsByAttribute(String key)(and related methods)Elementsiblings:siblingElements()、firstementSibling()、EllastElementSibling();nextElementSibling()、previousElementSibling()Graph:parent()、children()、child(int index)要素データattr(String key)取得属性attr(String key、String value)設定属性attributes()すべての属性id()、className()and className()取得テキスト内容text()取得テキスト内容text(String value)設定テキスト内容html()取得要素内HTML(String value)エレメント内のHTMLコンテンツouterHtml()を設定エレメント外HTMLコンテンツdata()取得データコンテンツ(例:scriptとstyleラベル)tag()and tagName()操作HTMLとテキストappend(String html)、prepend(String html)appendText(String text)、prependText(String text)appendElement(String tagName)、prependElement(String tagName)html(String value)
セレクタによる解析
Selectorセレクタの概要
データの修正(コピー&ペーストが一時的におっくう)
Xsoupが近づいています
Xpathとは
XPathはW 3 Cの標準です.最も主要な目的はXML 1である.0またはXML 1.1ドキュメントノードツリーの位置決めノードが設計されています.XPathは、ノード、ノードセット、原子値、およびノードと原子値の混合などを返す式言語です.
構文
ノードの選択
式#シキ#
説明
/
ルートノードから選択
//
選択に一致する現在のノードからドキュメント内のノードを選択し、その位置を考慮しません.
.
現在のノードを選択
..
現在のノードの親ノードの選択
@
属性の選択
≪インスタンス|Instance|emdw≫
パス式
結果
bookstore
bookstore要素のすべてのサブノードを選択します.
/bookstore
ルート要素bookstoreを選択します.注記:パスが正のスラッシュ(/)から始まる場合、このパスは常にエレメントへの絶対パスを表します.
bookstore/book
book storeに属するサブエレメントのすべてのbookエレメントを選択します.
//book
ドキュメント内のすべてのbookサブ要素を選択します.
bookstore//book
book store要素の子孫に属するすべてのbook要素を選択し、book storeの下にある場所にかかわらず選択します.
//@lang
langという名前のすべてのプロパティを選択します.
述語
式#シキ#
説明
/bookstore/book[1]
book storeサブエレメントに属する最初のbookエレメントを選択します.
/bookstore/book[last()]
book storeサブエレメントに属する最後のbookエレメントを選択します.
/bookstore/book[last()-1]
book storeサブエレメントに属する最後から2番目のbookエレメントを選択します.
/bookstore/book[position()<3]
一番前のbook store要素に属する2つのサブ要素のbook要素を選択します.
//title[@lang]
langという名前のプロパティを持つtitle要素をすべて選択します.
//title[@lang='eng']
すべてのtitle要素を選択し、engのlang属性を持つ要素を選択します.
/bookstore/book[price>35.00]
book store要素のすべてのbook要素を選択し、price要素の値は35.00より大きくする必要があります.
/bookstore/book[price>35.00]/title
book store要素のbook要素のすべてのtitle要素を選択し、price要素の値は35.00より大きくする必要があります.
不明なノードの選択
ワイルドカード
説明
*
任意の要素ノードを一致させます.
@*
アトリビュートノードを一致させます.
node()
任意のタイプのノードに一致します.
≪インスタンス|Instance|emdw≫
パス式
結果
/bookstore/*
bookstore要素のすべてのサブ要素を選択します.
//*
ドキュメント内のすべての要素を選択します.
//title[@*]
属性付きtitle要素をすべて選択します.
参照先:http://www.w3school.com.cn/xp...
これらをしばらく整理して、必要があればw 3 schoolに行って調べることができます
Jsoup
JsoupはJavaのHTML解析器で、あるURLアドレス、HTMLテキストの内容を直接解析することができます.
文字列からの解析
String html = "First parse Parsed HTML into a doc.
";
Document doc = Jsoup.parse(html);
URLからDocumentをロード
Document doc = Jsoup.connect("https://www.qq.com").get();
String title = doc.title();
なお、connect()メソッドは新しいConnectionオブジェクトを返すことができ、Connectionインタフェースは特殊な要求を解決するためのメソッドチェーンを提供します.具体的には、次のようにします.
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
URLからdomをロードすることもできます
Document dom = Jsoup.parse(new URL("https://www.qq.com"), 10000);
ファイルからdomをロード
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
parse(File in,String charsetName,String baseUri)この方法は、HTMLファイルをロードおよび解析するために使用されます.ファイルのロード中にエラーが発生した場合は、IOExceptionを放出し、適切な処理を行う必要があります.baseUriパラメータは、ファイル内のURLsが相対パスであるという問題を解決するために使用されます.空の文字列を入力する必要がない場合.
documentを巡るapi
要素getElementById(String id)getElementsByTag(String tag)getElementsByClass(String className)getElementsByAttribute(String key)(and related methods)Elementsiblings:siblingElements()、firstementSibling()、EllastElementSibling();nextElementSibling()、previousElementSibling()Graph:parent()、children()、child(int index)要素データattr(String key)取得属性attr(String key、String value)設定属性attributes()すべての属性id()、className()and className()取得テキスト内容text()取得テキスト内容text(String value)設定テキスト内容html()取得要素内HTML(String value)エレメント内のHTMLコンテンツouterHtml()を設定エレメント外HTMLコンテンツdata()取得データコンテンツ(例:scriptとstyleラベル)tag()and tagName()操作HTMLとテキストappend(String html)、prepend(String html)appendText(String text)、prependText(String text)appendElement(String tagName)、prependElement(String tagName)html(String value)
セレクタによる解析
Selectorセレクタの概要
tagname: , :a
ns|tag: , : fb|name
#id: ID , :#logo
.class: class , :.masthead
[attribute]: , :[href]
[^attr]: , : [^data-] HTML5 Dataset
[attr=value]: , :[width=500]
[attr^=value], [attr$=value], [attr*=value]: 、 , :[href*=/path/]
[attr~=regex]: , : img[src~=(?i)\.(png|jpe?g)]
*:
Selector
el#id: +ID, : div#logo
el.class: +class, : div.masthead
el[attr]: +class, : a[href]
, :a[href].highlight
ancestor child: , : .body p "body" p
parent > child: , : div.content > p p , body > * body
siblingA + siblingB: A B, :div.head + div
siblingA ~ siblingX: A X , :h1 ~ p
el, el, el: , , :div.masthead, div.logo
selectors
:lt(n): ( DOM ) n, :td:lt(3)
:gt(n): n, : div p:gt(2) div 2 p
:eq(n): n , :form input:eq(1) input Form
:has(seletor): , :div:has(p) div p
:not(selector): , : div:not(.logo) class=logo div
:contains(text): , , : p:contains(jsoup)
:containsOwn(text):
:matches(regex): , :div:matches((?i)login)
:matchesOwn(regex):
: 0 , 0, index 1
Selector API
データの修正(コピー&ペーストが一時的におっくう)
Xsoupが近づいています