2011-07-20 1 views
0

私はデータをマイニングするためにHTMLCleanerを使用....ここ は、それが働くん方法です:HtmlCleanerを使用して<a>タグ内にないノード要素を見つけるにはどうすればよいですか?

HtmlCleaner cleaner = new HtmlCleaner(); 
    final String siteUrl = "http://www.apple.com/"; 

    TagNode node = cleaner.clean(new URL(siteUrl)); 
    TagNode[] aTagNode = node.getAllElements(true); 

    for(int i = 0; i< aTagNode.length; i++){ 
      if(!aTagNode[i].hasAttribute("a")){ 
       System.out.println(aTagNode[i].getText()); 
      } 
    } 

をしかし、私はいくつかの問題がある見つける.... 例えば、テキスト取得:

   <a href="/choose-your-country/"> 
        <img src="http://images.apple.com/home/elements/worldwide_us.png" alt="United States of America" height="22" width="22" /> 
        <span class="more">Choose your country or region</span> 
       </a> 

spanタグ内にある「あなたの国または地域を選択してください」が、それは親ノードが「」タグであるのです.....私はそれはまた、私はちょうどこのような何かをしたいしたくありません... 。:

<p class="left">Shop the <a href="/store/">Apple Online Store</a> (1-800-MY-APPLE), visit an <a href="/retail/">Apple Retail Store</a>, or find a <a href="/buy/">reseller</a>.</p> 

は、私はこれらの言葉を無視したい、Apple Online StoreApple Retail Storeresellerは、タグ内のテキストがあるので結果はStop the(1-800-MY-APPLE),visit anor find a、および. ありたい、そう。ありがとうございました。

答えて

0
TagNode[] aTagNode = node.getAllElements(true); 
    ArrayList<TagNode> tagNodes = new ArrayList<TagNode>(); 
    Set<TagNode> toBeRemoved = new HashSet<TagNode>(); 
    for(int i = 0; i< aTagNode.length; i++){ 
      if(!aTagNode[i].hasAttribute("a")){ 
       tagNodes.add(aTagNode[i]); 
      }else{ 
       TagNode[] children = aTagNode[i].getChildTags(). 
       for(TagNode child : children) { 
       toBeRemoved.add(child); 
       } 
      } 
    } 
    for(TagNode node : tagNodes){ 
     if(!toBeRemoved.contains(node)){ 
     System.out.println(node.getText()); 
     } 
    }