2012-04-26 67 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()