泰仔在線

          java學(xué)習(xí),心情日記,繽紛時刻
          posts - 100, comments - 34, trackbacks - 0, articles - 0

          Nutch中的html頁面的解析問題

          Posted on 2010-04-23 17:38 泰仔在線 閱讀(3079) 評論(1)  編輯  收藏 所屬分類: 云計算相關(guān)

          今天主要研究了Nutch中的html頁面的解析問題,因為我的任務(wù)是從頁面中提取特定的文本,因此首先要找到Nutch如何將html中的文本提取出來。Nutch提供了兩種html解析器,nekohtml和tagsoup,我采用了neko的解析器,在看了代碼后,發(fā)現(xiàn)其提取文本的方法在org.apache.nutch.parse.html中的DOMContentUtils文件中,主要的函數(shù)是getTextHelper。下面做一下解釋。

          private boolean getTextHelper(StringBuffer sb, Node node,
                                                       boolean abortOnNestedAnchors,
                                                       int anchorDepth) {
              boolean abort = false;
              NodeWalker walker = new NodeWalker(node);// NodeWalk類用來非遞歸遍歷DOM樹節(jié)點
              int myint=1;
             
              while (walker.hasNext()){ //如果存在節(jié)點
             
                Node currentNode = walker.nextNode();//獲取下一個節(jié)點
                String nodeName = currentNode.getNodeName();//獲取節(jié)點名
                short nodeType = currentNode.getNodeType();//節(jié)點類型
                
                if ("script".equalsIgnoreCase(nodeName)) {//不處理腳本
                  walker.skipChildren();
                }
                if ("style".equalsIgnoreCase(nodeName)) {//不處理style
                  walker.skipChildren();
                }
                if (abortOnNestedAnchors && "a".equalsIgnoreCase(nodeName)) {//檢測是否嵌套
                  anchorDepth++;
                  if (anchorDepth > 1) {
                    abort = true;
                    break;
                  }       
                }
                if (nodeType == Node.COMMENT_NODE) {//不處理注釋
                  walker.skipChildren();
                }
                if (nodeType == Node.TEXT_NODE) {
                  // cleanup and trim the value
                  String text = currentNode.getNodeValue();//獲取文本內(nèi)容
                  text = text.replaceAll("\\s+", " ");//消除所有空格和轉(zhuǎn)行等字符
             text = text.trim();
                  if (text.length() > 0) {
                    if (sb.length() > 0) sb.append(' ');
                   sb.append(text);
                  }
                }
              }
          }

          調(diào)用這個函數(shù)的類是htmlParser類,如果想自己寫一個提取文本的函數(shù),可以做相應(yīng)修改。

          轉(zhuǎn)自:實習(xí)日記(六)

          Feedback

          # re: Nutch中的html頁面的解析問題  回復(fù)  更多評論   

          2013-03-19 16:53 by gongshijun
          怎樣改啊,nutch1.6都沒有你說的那些東西,找不到啊
          主站蜘蛛池模板: 松江区| 息烽县| 汽车| 日土县| 元谋县| 巨鹿县| 赫章县| 阿鲁科尔沁旗| 兴国县| 弥勒县| 个旧市| 淳化县| 永仁县| 邵阳市| 清水县| 贵阳市| 清远市| 漳平市| 林口县| 土默特左旗| 望江县| 山西省| 元谋县| 台州市| 房山区| 沈丘县| 曲阳县| 蓝田县| 莱西市| 个旧市| 中超| 南安市| 崇信县| 门源| 清流县| 清远市| 邻水| 临桂县| 沾益县| 佛坪县| 晴隆县|