java htmlparser 使用教程_HTMLParser使用详解(1)

在研究搜索引擎的开发中,对于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中文网,转载请注明出处,感谢您的尊重!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python mysql autocommit_MySQLdb autocommit的坑

今天写的一个小功能,里面要用MySQLdb更新数据库,语句如下sql "update %s.account_operation set status1 where username%s" % (allResDBInfos[db], username)变量替换后,是下面的样子update suspects.account_operation set stat…

java怎么在android系统上运行_Android == 在Android系统上运行JAVA程序

在linux上运行java程序,直接用javac编译,再用java运行就行了。但是在Android上,由于虚拟机和pc端的不同,所以操作方法也是不一样的。如果想在Android上运行Hello world!。则需要一下步骤。/* File Name: Hello.java */…

python火爆的原因_为什么Python这么火爆?原因是什么?

2021年FRM主要时间节点2021年02月第二阶段报名时间:2021/02/01 - 2021/03/31首次注册:$1200 USD / 非首次注册:$790 USD2021年05月第一阶段报名时间:2021/05/01 - 2021/07/31首次注册:$1000 USD / 非首次注册&#xff…

java hashtable 遍历_Java HashTable forEach()用法及代码示例

Hashtable类的forEach(BiConsumer)方法对哈希表的每个条目执行BiConsumer操作,直到已处理完所有条目或该操作引发异常。 BiConsumer操作是按迭代顺序执行的哈希表键值对的函数操作。方法遍历Hashtable的每个元素,直到该方法处理完所有元素或发生异常为止…

java dijkstra算法代码_[转载]Java实现dijkstra算法: 地图中任意起点寻找最佳路径...

最近在复习java,下学期要用,写这个练手. 技术较粗糙,见谅.代码里用的是这幅地图,根据实际情况更改,在addNode方法中这个是运行结果,起点和终点在 运行wrap(String qidian, String zhongdian) 时定义代码&a…

java xml opencv_Java中使用opencv

零、前言作为图像处理出身,不仅仅要会C图像处理、matlab图像处理、python图像处理、最起码也得会java图像处理,当然我最终还都用的是opencv这个机器视觉库了。今天简单介绍一下java中如何使用opencv。一、配置库(1)官网下载opencv,在opencv\b…

java实现table可编辑_动态渲染可编辑单元格的Table

一、问题描述问题是这样的,后台传了xArr [x1, x2,...,xn]和yArr [y1, y2, ..yn]两个数组,前端要渲染出表格并且可以填写每个单元格的值,然后按照一定数据结构保存并传给后台,并且再次获取这个数据结构和数组xArr、yArr可以自己渲…

java编写统计玩家总数的程序_JAVA程序:输出一组数后如何统计特定数的总数

题目:定义一个int型的一维数组,包含40个元素,用来存储每个学员的成绩,循环产生40个0~100之间的随机整数,将它们存储到一维数组中,然后统计成绩低于平均分的学员的人数,并输出出...题目&#xff…

java包裹邮费计算_GitHub - honghailiang/FreightSystem: 基于Java Swing编写的简易运费计算工具...

FreightSystem基于java Swing编写的运费计算系统初始化数据从excel中读取数据,转化为对象(只保存基础数据:序列号、始发站、目的站、省份、100kg以下(元/kg)、100kg以上(元/kg)、到货(元/kg)、自提(元/kg)、补贴里程、公路里程、单价(元/吨公里))并保存到…

java需求设计_JavaWeb期末设计---需求分析文档. stage1

影院活动管理系统—需求分析文档目录第2章 需求分析2.1 用户需求2.1.1 业务需求2.1.2 商业需求2.1.3 特殊需求2.2 可行性分析2.2.1 技术可行性2.2.2 经济可行性2.3 系统功能2.3.1 功能概述2.3.2 E-R图2.3.4 Domian logic2.3.5 系统框架图-------------------------------------…

java字节流转字符流的步骤_字节流-java入门基础笔记-51CTO博客

[14]字节流一.字节流1.什么是字节流是IO流中的一种, 可以用来读写字节数据.2.字节流和字符流的区别计算机中存储任何数据都是以字节的形式, 所以字节流可以读写任意类型的数据.在读写的数据是字符的时候, 用字符流更方便.3.什么时候用字节流, 什么时候用字符流当从一个文本文件…

java c s是什么_Java在C/S

随着Java语言的日益流行,特别是Java与InternetWeb的密切结合,使它在全球取得了巨大的成功。Java语言以其独立于平台、面向对象、分布式、多线索及完善的安全机制等特色,成为现代信息系统建设中的良好的开发平台和运行环境。一、Java网络应用模…

java质数判断程序_java判断一个数是否为素数/质数

质数(prime number)又称素数,定义为一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数。第一个思路假如我们需要判断数字是33,因为所有的数都可以被1整除&a…

selenium java po模式_selenium + java po模式

po模式大概介绍,大家也可以自己百度看看Page Object模式主要是将每个页面设计为一个类class,这个类包含页面中需要测试的元素(按钮、输入框、URL、标题等)和实际操作方法,这样在写测试用例时可以通过调用页面类的方法和属性来获取页面元素和操…

条件队列java_Java并发系列(4)AbstractQueuedSynchronizer源码分析之条件队列

AbstractQueuedSynchronizer内部维护了一个同步状态和两个排队区,这两个排队区分别是同步队列和条件队列。我们还是拿公共厕所做比喻,同步队列是主要的排队区,如果公共厕所没开放,所有想要进入厕所的人都得在这里排队。而条件队列…

java调用打印机打印需要进行什么操作_Java调用打印机程序有什么特点?

import java。awt。*;import java。awt。event。*;import java。awt。font。*;import java。awt。geom。*;import java。awt。print。*;import java。util。*;import javax。print。*;import javax。print。attribute。*;import javax。swing。*;/**This program demonstrates …

java基础语法实例教程_Java 基础语法

一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作面向对象中的一些概念下表列出了 面向对象 编程中的一些概念名词说明对象对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有…

python3软件怎么使用_python3怎么使用pip

pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。Python 2.7.9 或 Python 3.4 以上版本都自带 pip 工具。pip 官网:https://pypi.o…

svn php改客户端密码_记录VisualSVNServer配置在线密码修改功能

VisualSVN Server使用的是64位版查看对应的apache版本号是 2.2.32.这个版本需要使用php5.5以下的,且需要使用64位的php。下载php 5.4 的64位版本。配置Visual SVN Server支持php1. 将下载的php解压缩到VisualSVNServer的目录中C:Program FilesVisualSVN Serverphp2.…

java大量浮点数如何作比较,Java如何正确比较浮点数

看下面这段代码,将 d1 和 d2 两个浮点数进行比较,输出的结果会是什么?double d1 .1 * 3;double d2 .3;System.out.println(d1 d2);按照正常逻辑来看,d1经过计算之后的结果应该是0.3,最后打印的结果应该是 true&…