2012-04-26 47 views
0

我正在尝试浏览网页正文上的每个html标记,看看它是否有文本。如果是这样,我想打印出该文本:Jsoup细粒度解析

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()); 
      } 
     } 

上面的作品,但不是我想要它。看起来,child()方法并没有细化,因为它将多个'div class'元素聚集在一起。我怎样才能以更细致的方式遍历DOM体,看看每个标签的文字是什么?

预先感谢您。

+0

请更正确地标记。这不是数据挖掘。阅读维基百科关于数据挖掘的文章。这只是[tag:web-scraping]。数据挖掘是一种先进的统计分析,不从网站读取数据。 – 2012-04-27 06:32:10

回答

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()); 
} 

如果你想打印出所有的文本。为什么你不使用Elements类的text()