2017-11-01 7 views
1

私は、Adidas.com上の任意の靴へのリンクを生成するボットを作成して、靴のモデル番号とユーザーの靴サイズを考慮して靴の利用可能なサイズを確認します。JSoupを使用したWebスクレイピングドロップダウンリスト

私は靴の利用可能なサイズを取得するために、私はJSの拭き取りにJSoupを使用しています。アディダスは、ユーザーが任意の靴に適したサイズを選択するためのドロップダウンリストを実装しています。私は、ドロップダウンを検査すると、ウェブページはかなりの数のネストされた要素を持っているが、私は使用可能なサイズの実際のリストは、下のコードのこのブロックと判断した:さて、このリストを与え、私はこれらを取得する

<select class="select___Kst06"> 
    <option value="defaultOption" disabled="" hidden=""></option> 
    <option value="0">5</option> 
    <option value="1">6</option> 
    <option value="2">7</option> 
    <option value="3">7.5</option> 
    <option value="4">8</option> 
    <option value="5">8.5</option> 
    <option value="6">9</option> 
    <option value="7">9.5</option> 
    <option value="8">10</option> 
    <option value="9">10.5</option> 
    <option value="10">11</option> 
    <option value="11">11.5</option> 
    <option value="12">12</option> 
    <option value="13">12.5</option> 
    <option value="14">13</option> 
    <option value="15">14</option> 
</select> 

値を返し、それらを私のコードに返します。私はこの方法を実行したとき、私は[]が返される空の配列を取得し、しかし

public static String[] checkSizes(String addr) { 
    String[] sizesAvailable = null; 
    try { 
     Document document = Jsoup.connect(addr).get(); 
     Elements sizes = document.select(".select___Kst06"); 
     sizesAvailable = new String[sizes.size()]; 
     for (int i = 0; i < sizes.size(); i++) { 
      sizesAvailable[i] = sizes.get(i).text(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return sizesAvailable; 
} 

:私はちょうどそれを行うには、ここで、このメソッドを持っています。私は無数のセレクタ構文の組み合わせを試しましたが、無駄です。 Methinksそれは非常に難しいはずはありませんが、私はその明白なクエリを見逃しています。この場合、私は間違って何をしていますか?

私はJSoupを初めて使ったので、私に同行してください。そして、もし誰かがそれを自分自身で検査したいのであれば、hereは 'test'靴へのリンクです。サイトのすべての靴には同じテンプレートがあります。事前にあなたの助けをありがとう。

答えて

0

オプションの値の正しいCSSセレクタは.select___Kst06 > option:nth-child(n)です。そうしないので

int i = 2; 
while (true) { 
    Element size = document.select(".select___Kst06 > option:nth-child(" + i + ")").first(); 
    if (size == null) break; 
    System.out.println(size.text()); 
    //Add size.text() to your list 
    i++; 
} 

:あなたは空の値を取得するまでn=2から始めて、それをインクリメントする必要がありますので、<option value="defaultOption" disabled="" hidden=""></option>あなたのために有用な値が含まれていません - n=1のためには、最初のオプションを取得しますあらかじめ値の数を知っていれば、配列の代わりにリストを使用します。

+0

私はまだ空の '[]'リストを取得しています。 :( –

+0

'document'に正しいHTMLコードが含まれていることを確信していますか?どのURLを扱っているのかわからないので、私は静的なHTMLを使ってテストしています - ' String html = "