泰仔在线

java学习,心情日记,缤纷时刻
posts - 100, comments - 34, trackbacks - 0, articles - 0

Nutch中的html页面的解析问题

Posted on 2010-04-23 17:38 泰仔在线 阅读(3056) 评论(1)  编辑  收藏 所属分类: 云计算相关

今天主要研究了Nutch中的html页面的解析问题,因为我的任务是从页面中提取特定的文本,因此首先要找到Nutch如何将html中的文本提取出来。Nutch提供了两种html解析器,nekohtml和tagsoup,我采用了neko的解析器,在看了代码后,发现其提取文本的方法在org.apache.nutch.parse.html中的DOMContentUtils文件中,主要的函数是getTextHelper。下面做一下解释。

private boolean getTextHelper(StringBuffer sb, Node node,
                                             boolean abortOnNestedAnchors,
                                             int anchorDepth) {
    boolean abort = false;
    NodeWalker walker = new NodeWalker(node);// NodeWalk类用来非递归遍历DOM树节点
    int myint=1;
   
    while (walker.hasNext()){ //如果存在节点
   
      Node currentNode = walker.nextNode();//获取下一个节点
      String nodeName = currentNode.getNodeName();//获取节点名
      short nodeType = currentNode.getNodeType();//节点类型
      
      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();//获取文本内容
        text = text.replaceAll("\\s+", " ");//消除所有空格和转行等字符
   text = text.trim();
        if (text.length() > 0) {
          if (sb.length() > 0) sb.append(' ');
         sb.append(text);
        }
      }
    }
}

调用这个函数的类是htmlParser类,如果想自己写一个提取文本的函数,可以做相应修改。

转自:实习日记(六)

Feedback

# re: Nutch中的html页面的解析问题  回复  更多评论   

2013-03-19 16:53 by gongshijun
怎样改啊,nutch1.6都没有你说的那些东西,找不到啊

只有注册用户登录后才能发表评论。


网站导航: