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テキストの内容を直接解析することができます.
文字列からの解析
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が近づいています