2017-12-25 12 views
2

データを解析する必要があるウェブサイトがあります。私はキーワードの結果によっていくつかの検索を取得する必要があります。ただし、すべてのフィールドが製品のプレビューに表示されるわけではありません。これらのフィールド(商品の色、説明、古い価格)は、各商品ページからのみ拾い読みすることができます。製品ページのURLは次のようになりますhttps://www.aboutyou.de/p/new-look/basecap-in-satin-optik-3649077 SIは一般的な方法でそれを呼び出す方法を知らないので、各製品を調べる必要はありません。私はプロジェクトの名前とブランドを知ることができますが、URLを構築する方法はわかりません。すべての文字を大文字にし、単語間にダッシュを入れます。 私はこのような方法でブランド名と製品名を得ることができます:Satin-OptikのNEW LOOK Basecap。製品ページに接続するurls Jsoup

どのように各製品のURLを定義できますか?

String url = "https://www.aboutyou.de/frauen/accessoires/huete-und-muetzen/caps"; 
Document doc = Jsoup.connect(url).get(); 

System.out.println("Title: " + doc.title()); 

String mainPath = "section.layout_11glwo1-o_O-stretchLayout_1jug6qr > " + 
     "div.content_1jug6qr > " + 
     "div.container > " + 
     "div.mainContent_10ejhcu > " + 
     "div.productStream_6k751k > " + 
     "div > " + 
     "div.wrapper_8yay2a > " + 
     "div.col-sm-6.col-md-4 > " + 
     "div.wrapper_1eu800j > " + 
     "div > " + 
     "div.categoryTileWrapper_e296pg"; 

String searchPath = mainPath + " > a.anchor_wgmchy > " + 
     "div.details_197iil9 > " + 
     "div.meta_1ihynio"; 
String linksPath = mainPath + " > a.anchor_wgmchy"; 
String brandPath = mainPath + " > a.anchor_wgmchy > " + 
     "div.details_197iil9 > " + 
     "div.meta_1ihynio > " + 
     "div.description_ya0ltb > " + 
     "strong.brand_ke66rm"; 

Elements result = doc.body().select("main#app"); 
for(Element element : result) { 
    Elements products = element.select(searchPath); 
    Elements links = element.select(linksPath); 

    Elements brands = element.select(brandPath); 
    for(Element product : products){ 
     System.out.println(product.text()); 
    } 

    String[] linksText = null; 
    for(Element link : links){ 
     String linkHref = link.attr("href"); 
     String linkText = link.text(); 
     linksText = linkHref.split("[\\-]"); 
     String id = linksText[linksText.length-1]; 
     System.out.println("id: " + id); 
     System.out.print("link attr:" + linkHref + ", "); 
    } 
    System.out.print("\nbrands" + brands.text()); 
} 

はたぶん、そのためのいくつかのライブラリがあります。ここでは

は、私がこれまで持っているコードのですか?私はどんなアドバイスにも感謝しています!

答えて

0

必要な詳細情報のほとんどは、のように見えるのdivから取得することができますいくつかの分離と

-10%9,90€ -10 % EXTRA8,90€ NEW LOOK Basecap in Satin-Optik 8,01€ 

例コード:

<div class="details_..." ...> 

はあなたのような何かを与えるだろうこれらのdivのテキストをつかみます商品詳細ページのカラー詳細の詳細とサブリクエスト:

String url = "https://www.aboutyou.de/frauen/accessoires/huete-und-muetzen/caps"; 
String userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"; 

try { 
    Document doc = Jsoup.connect(url).userAgent(userAgent).get(); 
    Elements elements = doc.select("div[class^='categoryTileWrapper_']"); 

    for (Element element : elements) { 

     String brand = element.select("strong[class^='brand_']").first().text(); 
     String name = element.select("p[class^='name_']").first().text(); 
     System.out.println(brand + " - " + name); 

     String href = element.select("a[class^='anchor_']").first().absUrl("href"); 
     Document subDoc = Jsoup.connect(href).userAgent(userAgent).get(); 
     String color = subDoc.select("div[class^='attributeWrapper_']").first().text();  
     System.out.println("\t"+href); 
     System.out.println("\t"+color); 

     String finalPrice = element.select("div[class^='finalPrice_']").first().text(); 

     if(element.select("ul").size()>0){ 
      for (Element listItems : element.select("ul").first().select("li")) { 
       System.out.println("\tpriece was: " + listItems.select("span[class^='price_']").first().text()); 
      } 
     } 
     System.out.println("\tfinal priece: " + finalPrice); 
    } 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

出力:

NEW LOOK - Basecap in Satin-Optik 
    https://www.aboutyou.de/p/new-look/basecap-in-satin-optik-3649077 
    Textil Unifarben 
    priece was: 9,90€ 
    priece was: 8,90€ 
    final priece: 8,01€ 
WOOD WOOD - Weiche 'Baseball cap' 
    https://www.aboutyou.de/p/wood-wood/weiche-baseball-cap-3687779 
    Logoprint 
    priece was: 39,90€ 
    priece was: 29,90€ 
    final priece: 20,93€ 
[... truncated] 
+0

しかし、私も製品の色と説明が必要です。私は質問 – Cassie

+0

でそれを言及しました。@Cassie実際にサブクエリーが必要です。更新されたコードを見てください。 –

+0

@Cassieはこれで解決しましたか?その後、回答を受け入れるか、フォローアップのコメントを投稿してください。 –

関連する問題