最近在研究lucene,主要做ftp搜索和网页的站内搜索。
ftp搜索比较好做,主流的FTP有两种一种是IIS的一种是Server-U的.
真对这两种FTP分别进行分析就可以得到FTP资源的文件名和路径及大小和日期
然后对其进行索引就可以了,比较简单。
网页检索可不像ftp那样了,我试着用lucene自带的htmlparser,解析纯英文的网页
没有问题,可解析中文的网页时有时会遇到编码问题。郁闷。。。
SourceForge搜到了一个开源的HTMLParser。网址是http://htmlparser.sourceforge.net
目前的版本为1.6。

测试代码为:

import java.io.*;
import org.htmlparser.filters.*;
import org.htmlparser.*;
import org.htmlparser.nodes.*;
import org.htmlparser.tags.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;

public class HTMLParserTest
{
 public static void main(String args[]) throws Exception
 {
  String path = "D://Webdup//MyWebsites//biti//download//latest//cisco.biti.edu.cn//index.html";
  StringBuffer sbStr = new StringBuffer();
  BufferedReader reader  = new BufferedReader(new FileReader(new File(path)));
  String temp = "";
  while((temp=reader.readLine())!=null)
  {
   sbStr.append(temp);
   sbStr.append("/r/n");
  }
  reader.close();
 
 
  String result = sbStr.toString();
   readAll(result);
        readTextAndLink(result);
        readByHtml(result);
     readTextAndTitle(result);
 }

//按页面方式处理.解析标准的html页面
 public static void readByHtml(String content) throws Exception
    {
        Parser myParser;
        myParser = Parser.createParser(content, "GB2312");

HtmlPage visitor = new HtmlPage(myParser);

myParser.visitAllNodesWith(visitor);

String textInPage = visitor.getTitle();
        System.out.println(textInPage);
        NodeList nodelist ;
        nodelist = visitor.getBody();
        System.out.print(nodelist.asString().trim());
 
 
    }
   
    //读取文本内容和标题
 public static void readTextAndTitle(String result) throws Exception
 {
  Parser parser ;
  NodeList nodelist ;
  parser = Parser.createParser(result,"GB2312");
  NodeFilter textFilter = new NodeClassFilter(TextNode.class);
  NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
  OrFilter lastFilter = new OrFilter();
  lastFilter.setPredicates(new NodeFilter[]{textFilter,titleFilter});
  nodelist = parser.parse(lastFilter);
  Node[] nodes = nodelist.toNodeArray();
  String line ="";
  for(int i=0;i<nodes.length;i++)
  {
   Node node = nodes[i];
   if(node instanceof TextNode)
   {
    TextNode textnode = (TextNode) node;
    line = textnode.getText();
   }
   else
   if(node instanceof TitleTag)
   {
    TitleTag titlenode = (TitleTag) node;
    line = titlenode.getTitle();
   }
   if (isTrimEmpty(line))
                continue;
            System.out.println(line);
  }
 }
 
 //分别读纯文本和链接
 
 public static void readTextAndLink(String result) throws Exception
 {
  Parser parser;
  NodeList nodelist;
  parser = Parser.createParser(result,"GB2312");
  NodeFilter textFilter = new NodeClassFilter(TextNode.class);
  NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
  OrFilter lastFilter = new OrFilter();
  lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });
  nodelist = parser.parse(lastFilter);
  Node[] nodes = nodelist.toNodeArray();
  String line ="";
  for(int i=0;i<nodes.length;i++)
  {
   Node node = nodes[i];
   if(node instanceof TextNode)
   {
    TextNode textnode = (TextNode) node;
    line = textnode.getText();
   }
   else
   if(node instanceof LinkTag)
   {
    LinkTag link = (LinkTag)node;
    line = link.getLink();
   }
   if (isTrimEmpty(line))
                continue;
            System.out.println(line);
  }
 }
 
 
 
 
 
 public static void readAll(String result) throws Exception
 {
  Parser parser;
  Node[] nodes ;
  parser = Parser.createParser(result,"GB2312");
  nodes = parser.extractAllNodesThatAre(TextNode.class);
 
  //读取所有的内容节点
  for (int i = 0; i < nodes.length; i++)
        {
            TextNode textnode = (TextNode) nodes[i];
            String line = textnode.toPlainTextString().trim();
            if (line.equals(""))
                continue;
            System.out.println(line);
        }
 }
 
 
 /**
     * 去掉左右空格后字符串是否为空
     */
    public static boolean isTrimEmpty(String astr)
    {
        if ((null == astr) || (astr.length() == 0))
        {
            return true;
        }
        if (isBlank(astr.trim()))
        {
            return true;
        }
        return false;
    }

/**
     * 字符串是否为空:null或者长度为0.
     */
    public static boolean isBlank(String astr)
    {
        if ((null == astr) || (astr.length() == 0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

}

HTMLParser 使用相关推荐

  1. python htmlparser使用问题小结

    基于HTMLParser的反复使用的问题 from HTMLParser import HTMLParserclass MyHTMLParser(HTMLParser):data = []def ha ...

  2. python模块学习---HTMLParser(解析HTML文档元素)

    HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析. 本文主要简单讲一下HTMLParser的用法. 使用时需要定义一个从类HTMLParser继承的类,重定义 ...

  3. HTMLParser的初步学习

    Python的自带模块--HTMLParser的初步学习 HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析. 本文主要简单讲一下HTMLParser的用法. ...

  4. java htmlparser 使用教程_Java解析HTML之HTMLParser使用与详解

    HTMLParser将解析过的信息保存为一个树的结构.Node是信息保存的数据类型基础.请看Node的定义:public interface Node extends Cloneable;Node中包 ...

  5. 基于htmlparser实现网页内容解析

    网页解析,即程序自动分析网页内容.获取信息,从而进一步处理信息. 网页解析是实现网络爬虫中不可缺少而且十分重要的一环,由于本人经验也很有限,我仅就我们团队开发基于关键词匹配和模板匹配的主题爬虫的经验谈 ...

  6. 在.net中运用HTMLParser解析网页的原理和方法

    本文介绍了.net 版的一个HTMLParser网页解析开源类库(Winista.HTMLParser)的功能特性.工作原理和使用方法.对于使用.net进行Web信息提取的开发人员进行了一次HTMLP ...

  7. python模块之HTMLParser之穆雪峰的案例(理解其用法原理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之HTMLParser之穆雪峰的案例(理解其用法原理) #http://www.cnblog ...

  8. 使用ASIHTTPRequest 编译提示找不到libxml/HTMLparser.h的解决方法

    使用ASIHTTPRequest xcode编译提示找不到"libxml/HTMLparser.h",解决方法如下: 1>.在xcode中左边选中项目的root节点,在中间编 ...

  9. HtmlParser中的各种Filter(1)

    所有的Filter均实现了NodeFilter接口,此接口只有一个方法Boolean accept(Node node),用于确定某个节点 是否属于此Filter过滤的范围. HtmlParser在o ...

  10. .net HtmlParser初步使用研究

    这两天准备做一些网站编程的工作,于是对HtmlParse小研究了一下,目的是快速入手,而不是深入研究,做了一下整理,和大家共同讨论一下. 一,数据组织分析: HtmlParser主要靠Node.Abs ...

最新文章

  1. PCL—低层次视觉—点云分割(基于凹凸性)
  2. 过渡期间的测试:外包软件的测试标准(译)
  3. 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
  4. iofd:文件描述符_文字很重要:谈论设计时18个有意义的描述符
  5. 为什么我不建议产品经理硬“抄”别人的用户画像?
  6. 稀疏矩阵建立十字链表c语言,实验6-稀疏矩阵十字链表的存储.doc
  7. java带参数的构造方法_java练习本(20190603)
  8. 西门子wincc消息队列服务器,安装Wincc 7.0 ASIA时,消息队列装不上,提示错误-工业支持中心-西门子中国...
  9. 计算机系统新手入门,电脑初学者入门教程
  10. Apache启动失败,请检查相关配置。√MySQL5.1已启动。
  11. 在哪里看服务器cpu占用率,top命令查看服务器cpu使用情况等
  12. vue项目中如何简单的读取声音文件
  13. 【CSS】4步教你绘制爱心图案
  14. 金庸小说人物知识图谱构建——以《雪山飞狐》为例
  15. linux dmesg命令参数及用法详解
  16. 我不服!这开源项目居然才888个星!?
  17. Flutter 项目 app迭代更新
  18. L2-001 紧急救援 - java
  19. 【全年汇总】2023年CCF人机交互会议截稿时间汇总(持续更新)
  20. 用计算机对医学图像做后处理,医学图像后处理.ppt

热门文章

  1. 无线定位技术实验一 TDOA-FDOA联合定位
  2. 《我曾七次鄙视自己的灵魂》-纪伯伦
  3. 5G无线网节能关键技术
  4. 微信公众号二次开发可以做哪些功能
  5. C# 操作 Excel 单元格格式设置
  6. 图解红黑树及Java进行红黑二叉树遍历的方法
  7. XXTea 加密/解密 字符串
  8. 第六次作业 - 团队选题报告
  9. 知识点滴 - 关于汉语学习的网络资源
  10. 程序员网页版工具集合