2017-01-02 7 views
0

最近JSoupでHTML文書を解析しようとしましたが、私はJSoupのturorialを経由して、select-Methodが探しているかもしれないことがわかりました。JSoup Selectタグ再帰的検索

私が達成しようとするのは、特定のクラスを持つhtmlドキュメントのすべての要素を見つけることです。それをテストするために、私はアマゾンのWebページ(アイデア:特定のオファーを持つすべての取引を見つける)でこれを試しました。

私はどのクラスとIDが使用されているかを調べるためにWebページを調べて、これを小さなコードスニペットに統合しようとしました。この例では、私はfollwing要素が見つかりました:

<span id="dealTitle" class="a-size-base a-color-link dealTitleTwoLine restVisible singleCellTitle autoHeight">PROCAVE Matratzen-Brücke aus Schaumstoff 25 x 200 cm für ...</span> 

この要素は他の要素に埋め込まれ(もちろん、各取引のために)複数回存在しています。そこで、取引の要素を読むコードは次のとおりです。

Document doc = Jsoup.connect("https://www.amazon.de/gp/angebote/ref=gbph_ftr_s-8_cd61_page_1?gb_f_LD=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL%252CUPCOMING,dealTypes:LIGHTNING_DEAL,page:1,sortOrder:BY_SCORE,dealsPerPage:8&pf_rd_p=425ddcb8-bed4-4e85-ac0f-c1a79d14cd61&pf_rd_s=slot-8&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_r=BTHRY008J9N3N5CCMNEN&gb_f_second=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL,dealTypes:COUPON_DEAL,page:8,sortOrder:BY_SCORE,dealsPerPage:8").timeout(0).get(); 

      Elements deals = doc.select("span.a-size-base.a-color-link.dealTitleTwoLine.restVisible.singleCellTitle.autoHeight"); 

      for (Element deal : deals) { 
       if (deal.text().contains("ItemMatch")) { 
        System.out.println("Found deal: " + deal.text()); 
       } 
      } 

残念ながら、私は探している要素を得ることができません。 取引のサイズは常に0です。クラスの一部だけで選択を修正しようとしましたが、id属性などを追加しました。それにもかかわらず、私は要素を取得しません(この場合、これらはいくつかの要素にネストされています)。 DOM階層内のこの要素の上にある要素(たとえば、 "a-section a-spacing-none slotContainer"というクラスのdiv)を試してみると、これが見つかります。

が、私は実際に私の選択式の中で「>」を使用して(全体のDOM階層を指定する必要がありますか?私はセレクタを定義することが可能とJSoupだろうトラヴァースと全体のDOMツリーを検索することが期待される。

+0

あなたの質問が十分に答えられた場合は、最良の答えを受け入れることを検討し、この問題を解決済みとしてマークすることを検討する必要があります。さらに助けが必要な場合は、必要なものを正確に指定してください。 – luksch

答えて

0

DOMの完全な階層を指定する必要はありません。要素が実際にDOMの一部である場合、テストは機能しますが、JSoupとしてロードされているのでDOMの一部ではない可能性がありますが、内部DOMノードはAJAXを介してJavaScriptで埋められています.JSoupはJavaScriptを実行しないため、動的にロードされたDOM部分にアクセスすることはできません。セレンのwebdriverのような別のソリューションに、仕事を含む実際のブラウザを実行するJavaScriptエンジン。

+0

あなたはJS/AJAXのためにそうです。セレンのwebdriverにリダイレクトしてくれてありがとう、代わりにそれを試してみます。 –

関連する問題