Javaネットワーク爬虫(六)--Jsoupのselect文法を使って要素検索を行います.


Jsoupを使って元素の検索を行う方法は2つあります.DOM法を使用して一つのドキュメントを巡回することもあります.選択文法を使用して要素を検索することもあります.後者はCSSまたはjQueryのような文法で要素を探したり、操作したりします.この二つの方法はどれを使ったらいいのかは人によって違うと思います.二つの方法を試してみましたが、私はselectの文法をまとめました.DOM方法に興味があるのは、このブログを見てみてください.見る前に、Javaネットワーク爬虫ーHTML DOM(HTMLベース)を調べたほうがいいです.
詳しく解説する
DcumentはElement類から継承されています.Select方法はElementsセットに戻ります.
1.ラベル名来で検索:テストコード:
<span>33</span>
<span>25</span>
要約の書き方:
Elements elements = document.select("span");
下の例は上のように書きます.繰り返しの表示はしません.
2.idで検索する:
<span id=\"mySpan\">36</span>
<span>20</span>
Elements elements = document.select("#mySpan");
//  id   ,     css      , #
3.class名来で検索する:
<span class="myClass">36</span>
<span>20</span>
Elements elements = document.select(".myClass");
//     css      , .
4.ラベル内の属性名を使って要素を検索する:
<span class="class1" id="id1">36</span>
<span class="class2" id="id2">36</span>
Elements elements = document.select("span[class=class1]span[id=id1]");
//       【   =   】,       【】,  
5.ラベル内の属性名プレフィックスを利用して要素を検索する:
<span class="class1" >36</span>
<span class="class2" >22</span>
Elements elements = document.select("span[^cl]");
//       【^     】,       【】
6.ラベル内の属性名+正規表現を使って要素を検索します.正規表現を知らない学生は必ず正規表現を勉強します.爬虫類の中では重要です.
<span class="ABC" >36</span>
<span class="ADE" >22</span>
Elements elements = document.select("span[class~=^AB]");
//       【   ~=     】,              class  AB      
7.ラベルテキストを使っていくつかの内容を含んで検索します.
<span>36</span>
<span>22</span>
Elements elements = document.select("span:contains(3)");
//       :contains(   )
8.ラベルテキストを使っていくつかの内容+正規表現を検索します.
<span>36</span>
<span>22</span>
Elements elements = document.select("span:matchesOwn(^3)");
//       :matchesOwn(     ),                3      
もちろんselectは他の強大な機能があります.selectに興味がある学生はselect APIを調べられます.ウェブページの特定の内容を得るために必要なselectの基本的な文法を並べただけです.ほとんどの爬虫類需要にとっては十分です.
次に、selectを使って特定の要素値を取得するコードを示します.
public class SelectDemo {
    public static void test(String html) {
        //  Jsoup  
        Document doc = Jsoup.parse(html);
        //System.out.println(html);

        //  html      
        Elements elements = doc.select("ul[class=gl-warp clearfix]")
                .select("li[class=gl-item]");

        for (Element ele : elements) {
            String JdbookID = ele.attr("data-sku");
            //out.println(JdbookID);
        }
    }
}
上のコードは京東書に登り、本のidを取った部分を切り取ります.selectの使い方は前の話とあまり変わりません.Elementというクラスでは、ラベルの属性値またはテキストの内容を取得するなら、このようにしてもいいです.
for (Element ele : elements) {
    String JdbookID = ele.attr("data-sku");     //  data-sku    
    //out.println(JdbookID);
    String text = ele.text();                   //      (  )    
    //out.println(text);
}