2012-04-26 4 views
0

私はウェブページの本文にあるすべてのHTMLタグを調べて、その中にテキストがあるかどうかを確認しようとしています。作品の上Jsoup Fine Grained Parse

Document doc = Jsoup.connect(site).get();  
    Elements e = doc.body().getAllElements(); 
     for (int i=0; i<e.size(); i++){ 
     if(doc.body().child(i).hasText()){ 
     System.out.println(doc.body().child(i).text()); 
      } 
     } 

を、私はそれを望んでいないか。もしそうであれば、私はそのテキストのプリントアウトをしたいと思います。それは複数の 'divクラス'要素を一緒に塊にするので、child()メソッドはきめ細かくないようです。 DOM Bodyをより細かくトラバースして、それぞれのタグのテキストが何であるかを確認するにはどうすればよいですか?

ありがとうございます。

+0

もっと適切にタグを付けてください。これはデータマイニングではありません。データマイニングに関するウィキペディアの記事を読んでください。これはちょうど[タグ:web-scraping]です。データマイニングは高度な統計分析であり、ウェブサイトからデータを読み込むことはありません。 –

答えて

1
Document doc = Jsoup.connect(site).get(); 
    doc.body().traverse(new NodeVisitor() { 

     @Override 
     public void head(Node node, int depth) { 
      if (node instanceof TextNode) { 
       TextNode tn = ((TextNode) node); 
       // Try to improve this filter for the nodes who contain 
       // texts with a whitespaces 
       if (tn.text().replaceAll("\\s*", "").length() > 0) { 
        System.out.println("Tag:" + tn.parent().nodeName() 
          + ", text:" + tn.text()); 
       } 
      } 
     } 

     @Override 
     public void tail(Node node, int depth) { 
      // Do Nothing 
     } 
    }); 
1

あなたはthisアプローチ

を使用することができますし、トラバースの内側に、あなたは、現在のノードがTextNodeであるかどうかを確認することができます:あなたはすべてのテキストを印刷しようとしている場合は

if(node intanceof TextNode) { 
    System.out.println(node.text()); 
} 

。あなたはなぜtext()Elementsクラスから使いませんか?