泰仔在線

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

          今天主要研究了Nutch中的html頁(yè)面的解析問(wèn)題,因?yàn)槲业娜蝿?wù)是從頁(yè)面中提取特定的文本,因此首先要找到Nutch如何將html中的文本提取出來(lái)。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類用來(lái)非遞歸遍歷DOM樹(shù)節(jié)點(diǎn)
              int myint=1;
             
              while (walker.hasNext()){ //如果存在節(jié)點(diǎn)
             
                Node currentNode = walker.nextNode();//獲取下一個(gè)節(jié)點(diǎn)
                String nodeName = currentNode.getNodeName();//獲取節(jié)點(diǎn)名
                short nodeType = currentNode.getNodeType();//節(jié)點(diǎn)類型
                
                if ("script".equalsIgnoreCase(nodeName)) {//不處理腳本
                  walker.skipChildren();
                }
                if ("style".equalsIgnoreCase(nodeName)) {//不處理style
                  walker.skipChildren();
                }
                if (abortOnNestedAnchors && "a".equalsIgnoreCase(nodeName)) {//檢測(cè)是否嵌套
                  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)用這個(gè)函數(shù)的類是htmlParser類,如果想自己寫一個(gè)提取文本的函數(shù),可以做相應(yīng)修改。

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

          Feedback

          # re: Nutch中的html頁(yè)面的解析問(wèn)題  回復(fù)  更多評(píng)論   

          2013-03-19 16:53 by gongshijun
          怎樣改啊,nutch1.6都沒(méi)有你說(shuō)的那些東西,找不到啊
          主站蜘蛛池模板: 武汉市| 沭阳县| 三穗县| 舟曲县| 监利县| 四平市| 色达县| 中西区| 铅山县| 莆田市| 巴中市| 库车县| 彭州市| 新丰县| 鹰潭市| 铁力市| 沽源县| 乌恰县| 邛崃市| 霍山县| 隆林| 衡南县| 图们市| 安西县| 宁阳县| 辽阳市| 合阳县| 灵宝市| 永登县| 朔州市| 吉水县| 蓬溪县| 台中县| 嘉善县| 义马市| 花垣县| 阿坝县| 六盘水市| 刚察县| 广宗县| 宣武区|