在研究搜索引擎的开发中,对于HTML网页的处理是核心的一个环节。网上有很多开源的代码,对于Java来说,HTMLParser是比较著名并且得到广泛应用的一个。HTMLParser的主页是http://htmlparser.sourceforge.net/,最后的更新是2006年9月的1.6版。不过没关系,HTML的内容已经很久没有大的变化了,HTMLParser处理起来基本没有任何问题。HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索。对于初学者还是要费一些功夫的,而一旦上手以后,会发现HTMLParser的结构设计很巧妙,非常实用,基本你的各种需求都可以满足。

这里我根据自己这几个月来的经验,写了一点入门的东西,希望能对新学习HTMLParser的朋友们有所帮助。(不过当年高考本人语文只比及格高一分,所以文法方面的问题还希望大家多多担待)

HTMLParser的核心模块是org.htmlparser.Parser类,这个类实际完成了对于HTML页面的分析工作。这个类有下面几个构造函数:

public Parser ();

public Parser (Lexer lexer, ParserFeedback fb);

public Parser (URLConnection connection, ParserFeedback fb) throws ParserException;

public Parser (String resource, ParserFeedback feedback) throws ParserException;

public Parser (String resource) throws ParserException;

public Parser (Lexer lexer);

public Parser (URLConnection connection) throws ParserException;

和一个静态类 public static Parser createParser (String html, String charset);

对于大多数使用者来说,使用最多的是通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer则是一个相对比较高级的话题,放到以后再讨论吧。

这里比较有趣的一点是,如果需要设置页面的编码方式的话,不使用Lexer就只有静态函数一个方法了。对于大多数中文页面来说,好像这是应该用得比较多的一个方法。

下面是初始化Parser的例子。/**

* @author www.baizeju.com

*/

package com.baizeju.htmlparsertester;

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.FileInputStream;

import java.io.File;

import java.net.HttpURLConnection;

import java.net.URL;

import org.htmlparser.visitors.TextExtractingVisitor;

import org.htmlparser.Parser;

/**

* @author www.baizeju.com

*/

public class Main {

private static String ENCODE = "GBK";

private static void message( String szMsg ) {

try{ System.out.println(new String(szMsg.getBytes(ENCODE), System.getProperty("file.encoding"))); } catch(Exception e ){}

}

public static String openFile( String szFileName ) {

try {

BufferedReader bis = new BufferedReader(new InputStreamReader(new FileInputStream( new File(szFileName)), ENCODE) );

String szContent="";

String szTemp;

while ( (szTemp = bis.readLine()) != null) {

szContent+=szTemp+"/n";

}

bis.close();

return szContent;

}

catch( Exception e ) {

return "";

}

}

public static void main(String[] args) {

String szContent = openFile( "E:/My Sites/HTMLParserTester.html");

try{

//Parser parser = Parser.createParser(szContent, ENCODE);

//Parser parser = new Parser( szContent );

Parser parser = new Parser( (HttpURLConnection) (new URL("http://127.0.0.1:8080/HTMLParserTester.html")).openConnection() );

TextExtractingVisitor visitor = new TextExtractingVisitor();

parser.visitAllNodesWith(visitor);

String textInPage = visitor.getExtractedText();

message(textInPage);

}

catch( Exception e ) {

}

}

}

加重的部分测试了几种不同的初始化方法,后面的显示了结果。大家看到能Parser出内容就可以了,如何操作访问Parser的内容我们在后面讨论。

以上就是HTMLParser使用详解(1)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

java htmlparser 使用教程_HTMLParser使用详解(1)相关推荐

  1. java htmlparser 使用教程_htmlParser使用教程

    最近在研究lucene的全文检索,在很多地方需要解析或者说分析Html内容或者Html页面,Lucene本身的演示程序中也提供了一个Html Parser, 但是不是纯Java的解决方案.于是到处搜索 ...

  2. JAVA 入坑教程 | 章节九 详解java的装箱和拆箱

    简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节 什么是装箱?什么是拆箱?代码如何展示? 装箱过程是怎样的?拆箱过程是怎样的? 有问题可加入安卓QQ群: 246231638 ...

  3. java htmlparser 使用教程_HtmlParser基础教程

    1.相关资料 官方文档:http://htmlparser.sourceforge.net/samples.html API:http://htmlparser.sourceforge.net/jav ...

  4. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台

    SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台 作者:一一哥 我在上一章节中讲解了Spring Boot中整合Mybatis,接下来我给大家介绍一款内存数据库--H2. H ...

  5. 教妹学Java(十九):continue 关键字详解

    你好呀,我是沉默王二,是<Web 全栈开发进阶之路>的作者,CSDN 2019 年度的博客之星.<教妹学 Java>是一套非常有趣的付费专栏,除了继续保持幽默风趣的行风风格,我 ...

  6. java JDK安装与环境配置详解(超超超级详细)

    点击以下链接获取详细图文教程! java JDK安装与环境配置详解 https://v.xiumi.us/board/v5/3QTAV/112689421

  7. R语言 | xlsx包的安装(附链接:java环境变量的配置与详解)

    在下载xlsx包之前,要先下载java并且完成环境变量的设置 详细的教程见:(7条消息) java环境变量 的配置与详解(全网最详细教程)_S-D-C-L-Yourn的博客-CSDN博客_java环境 ...

  8. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  9. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

最新文章

  1. 我有做短视频的freestyle,要来一起吗?
  2. Windows 7 下右键发送到菜单项没了
  3. 工控蜜罐Conpot部署和入门及高级演变
  4. Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取
  5. Java线程池架构(一)原理和源码解析
  6. iphone保修期多久_小心!iPhone翻新机,黑机,妖机,1978机千万别买!
  7. Css学习总结(3)——CSS布局解决方案 - 水平、垂直居中、多列布局、全屏布局
  8. 2016电大计算机网考,2016电大计算机网考选择题及答案.doc
  9. 将小写金额转换成大写金额[存储过程版]
  10. 地推话术 地推活动策划方案 活动策划方案案例 分享经济活动策划方案
  11. 微信发送语音功能测试用例
  12. Java设计模式实战 ~ 观察者模式分析与实战
  13. 卷积神经网络在物联网场景中的应用初探
  14. Windows系统近年漏洞概况及攻击教程防御
  15. css设overflow:hiden行内元素会发生偏移的现象
  16. 如何使用CC攻击中小型网站?
  17. 单片机 信号发生器(DAC0832)
  18. 一次性永远激活7290自带浏览器上网和彩信收发功能
  19. bugku crypto-python_jail
  20. HTML5 2D 游戏开发(一): Snail Bait 简介

热门文章

  1. Oracle数据库版本维护支持结束时间表以及数据库版本发行时间表
  2. 智能指针分配动态数组
  3. excel处置4000行数据卡_懂Excel就能轻松入门Python数据分析包pandas(三):制作成绩条...
  4. react的导出是怎么实现的_从零开始开发一个 React
  5. python getopt参数参数自动补全_如何在Python中使用getopt / OPTARG?如果给出过多的参数(9),如何转移参数?...
  6. linux一个vlan配置多个端口映射,Linux 设置 多ip,多vlan
  7. sendmail发送html邮件,尝试使用sendmail发送/发送html电子邮件,但显示电子邮件的源代码...
  8. 关于海康官网接口文档中:取流URL有效时间为5分钟表述歧义的说明
  9. wince手机投屏代码_除了 iOS,这些手机系统你肯定没用过
  10. mysql怎么加固_mysql安装及加固