2016-11-08 3 views
1

JavaでJsoupを使用してアイテムを解析しようとしています。 私が使用したとき、私は、このソースコードのいずれか1 + 1セクションのためか、2 + 1セクションが表示されているではJsoup htmlスパンでアイテムをパーズする

<ul class="myptab typ3"> 
     <li><span class="active"><a href="#;" id="ONE_TO_ONE">1+1</a></span></li> 
     <li><span><a href="#;" id="TWO_TO_ONE">2+1</a></span></li> 
    </ul> 


    <h5 class="invisible" >1+1 itemlist</h5> 
    <div class="tblwrap mt50"> 
     <ul class="prod_list"> 
     </ul> 
     <div class="paging"> 
     </div> 
    </div> 

    <h5 class="invisible">2+1 itemlist</h5> 
    <div class="tblwrap mt50"> 
     <ul class="prod_list"> 

     </ul> 
     <div class="paging"> 
     </div> 
    </div> 

を読み取ろうとするけどよ、ウェブサイトのソースコードをオープンソースを見て点検します1 + 1セクション項目のコード、

<h5 class="invisible">1+1 itemlist</h5> 
    <div class="tblwrap mt50"> ==$0 
    <ul class="prod_list"> 
     <li> 
     <div class="prod_box"> 
      <p class="img"></p> 
      <p class="title">mangomilk_pet_300ML</p> 
     </li> 
     <li>...</li> 
     <li>...</li> 
     <li>...</li> 
    </ul> 

それはそのようなポップアップ。 私はソースコードの隠しスパンアイテムからp.titleとp.imgを選択したいと思います。

答えて

0

コンテンツはjavascriptで動的に作成されているようです。この場合jsoupでは不十分です。 jBrowserDriverを使用して、完成したDOM(レンダリングされたjavascript部分で)を取得することができます。

例コード:

// Represents result item 
public class ProductBox { 
    private final String image; 
    private final String title; 

    public ProductBox(String image, String title) { 
     this.image = image; 
     this.title = title; 
    } 

    public String getImage() { return image; } 
    public String getTitle() { return title; } 
} 


// Method responsible for parsing a page 
public void processPage(String url) { 
    JBrowserDriver driver = new JBrowserDriver(Settings 
      .builder() 
      .timezone(Timezone.AMERICA_NEWYORK) 
      .userAgent(UserAgent.CHROME) 
      .build()); 

    driver.get(url); 
    String pageSource = driver.getPageSource(); 
    driver.quit(); 

    Document doc = Jsoup.parse(pageSource); 
    Elements prodBoxes = doc.select("ul.prod_list div.prod_box"); 
    List<ProductBox> products = prodBoxes.stream() 
      .map(e -> new ProductBox(e.select("p.img").text(), e.select("p.title").text())) 
      .collect(Collectors.toList()); 

    products.forEach(e -> System.out.printf("%s - %s\n", e.getImage(), e.getTitle())); 
} 
関連する問題