方法test1应该说是最有效的,避免了出现很多空格。
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.nodes.TextNode;
import org.htmlparser.parserapplications.StringExtractor;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.visitors.TextExtractingVisitor;
/**
* 演示了Html Parse的应用.
*/
public class ParseHtmlTest
{
public static void main(String[] args) throws Exception
{
String aFile = "D:\\Eclipse\\workspace\\search\\test001\\content_1349887.htm";
String content = readTextFile(aFile, "GBK");
StringExtractor se;
se = new StringExtractor (aFile);
System.out.println(se.extractStrings(false));
test1(content);
System.out.println("=====Test1==============================");
test2(content);
System.out.println("=====Test2==========================");
test3(content);
System.out.println("=====Test3===============================");
test4(content);
System.out.println("=====Test4===============================");
test5(aFile);
System.out.println("======Test5==============================");
//访问外部资源,相对慢
test5("http://www.medlink.com.cn");
System.out.println("====================================");
}
/**
* 读取文件的方式来分析内容.
* filePath也可以是一个Url.
*
* @param resource 文件/Url
*/
public static void test5(String resource) throws Exception
{
Parser myParser = new Parser(resource);
//设置编码
myParser.setEncoding("GBK");
HtmlPage visitor = new HtmlPage(myParser);
myParser.visitAllNodesWith(visitor);
String textInPage = visitor.getBody().toString();
System.out.println(textInPage);
}
/**
* 按页面方式处理.对一个标准的Html页面,推荐使用此种方式.
*/
public static void test4(String content) throws Exception
{
Parser myParser;
myParser = Parser.createParser(content, "GBK");
HtmlPage visitor = new HtmlPage(myParser);
myParser.visitAllNodesWith(visitor);
String textInPage = visitor.getTitle();
System.out.println(textInPage);
System.out.println("--------------------");
System.out.println(visitor.getBody());
}
/**
* 利用Visitor模式解析html页面.
*
* 小优点:翻译了<>等符号
* 缺点:好多空格,无法提取link
*
*/
public static void test3(String content) throws Exception
{
Parser myParser;
myParser = Parser.createParser(content, "GBK");
TextExtractingVisitor visitor = new TextExtractingVisitor();
myParser.visitAllNodesWith(visitor);
String textInPage = visitor.getExtractedText();
System.out.println(textInPage);
}
/**
* 得到普通文本和链接的内容.
*
* 使用了过滤条件.
*/
public static void test2(String content) throws ParserException
{
Parser myParser;
NodeList nodeList = null;
myParser = Parser.createParser(content, "GBK");
NodeFilter textFilter = new NodeClassFilter(TextNode.class);
NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
//暂时不处理 meta
//NodeFilter metaFilter = new NodeClassFilter(MetaTag.class);
OrFilter lastFilter = new OrFilter();
lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter });
nodeList = myParser.parse(lastFilter);
Node[] nodes = nodeList.toNodeArray();
for (int i = 0; i < nodes.length; i++)
{
Node anode = (Node) nodes[i];
String line = "";
if (anode instanceof TextNode)
{
TextNode textnode = (TextNode) anode;
line = textnode.toPlainTextString().trim();
//line = textnode.getText();
}
// else if (anode instanceof LinkTag)
// {
// LinkTag linknode = (LinkTag) anode;
//
// line = linknode.getLink();
// //@todo 过滤jsp标签:可以自己实现这个函数
// //line = StringFunc.replace(line, "<%.*%>", "");
// }
if (isTrimEmpty(line))
continue;
System.out.println(line);
}
}
/**
* 解析普通文本节点.
*
* @param content
* @throws ParserException
*/
public static void test1(String content) throws ParserException
{
Parser myParser;
Node[] nodes = null;
myParser = Parser.createParser(content, null);
nodes = myParser.extractAllNodesThatAre(TextNode.class); //exception could be thrown here
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);
}
}
/**
* 读取一个文件到字符串里.
*
* @param sFileName 文件名
* @param sEncode String
* @return 文件内容
*/
public static String readTextFile(String sFileName, String sEncode)
{
StringBuffer sbStr = new StringBuffer();
try
{
File ff = new File(sFileName);
InputStreamReader read = new InputStreamReader(new FileInputStream(ff),
sEncode);
BufferedReader ins = new BufferedReader(read);
String dataLine = "";
while (null != (dataLine = ins.readLine()))
{
sbStr.append(dataLine);
sbStr.append("\r\n");
}
ins.close();
}
catch (Exception e)
{
// LogMan.error("read Text File Error", e);
}
return sbStr.toString();
}
/**
* 去掉左右空格后字符串是否为空
* @param astr String
* @return boolean
*/
public static boolean isTrimEmpty(String astr)
{
if ((null == astr) || (astr.length() == 0))
{
return true;
}
if (isBlank(astr.trim()))
{
return true;
}
return false;
}
/**
* 字符串是否为空:null或者长度为0.
* @param astr 源字符串.
* @return boolean
*/
public static boolean isBlank(String astr)
{
if ((null == astr) || (astr.length() == 0))
{
return true;
}
else
{
return false;
}
}
}
分享到:
相关推荐
### HTMLParser抽取Web网页正文信息的关键知识点 #### 一、HTMLParser简介与应用 HTMLParser是一种用于解析HTML文档的工具,特别适用于从Web网页中提取有用的信息。它能够有效地识别和解析HTML标签,帮助开发者从...
HTMLParser 是一个强大的工具,用于解析和...通过上述方法,HTMLParser可以帮助我们有效地从网页中抽取出主要内容,提高信息检索的精确性和效率。这种方法在网页爬虫、内容分析和信息提取等领域具有广泛的应用价值。
例如,在提取电子邮件地址时,可以使用HTMLParser结合正则表达式来识别符合电子邮件格式的文本。 ### 正则表达式的应用 正则表达式是一种强大的文本匹配工具,广泛应用于字符串搜索和替换中。在Web信息抽取中,...
本篇文章将详细介绍如何使用HtmlParser来解析HTML,并从中提取所需的数据。 HtmlParser的设计理念是通过事件驱动的方式解析HTML,即当遇到特定的HTML标签或内容时,会触发相应的事件。这种模式使得代码更简洁,易于...
总之,HttpClient和HtmlParser结合使用,可以构建一个基础的网络爬虫,用于抓取和解析网页数据。它们提供了一种有效的方式,让开发者能够轻松地与Web服务器交互,并处理返回的HTML内容,从而实现各种Web数据挖掘和...
1. `org.htmlparser.Node`:这是所有节点的基本接口,提供了一系列操作方法,如将节点转化为纯文本或HTML字符串,遍历树形结构,获取节点的父节点、子节点、兄弟节点,以及获取节点在HTML源代码中的起始和结束位置。...
- **Node**: 是HtmlParser中最基本的数据表示单元,它定义了一系列方法,如获取页面树结构中的节点、父节点、子节点和兄弟节点等。 - **AbstractNode**: 提供了Node的一些抽象实现,简化了实际开发过程中的编码工作...
在"htmlparser实现从网页上抓取数据.pdf"这份文档中,可能会详细讲解如何使用HTMLParser来高效、准确地抓取网页上的目标数据。 1. **HTMLParser简介**:HTMLParser是一个轻量级的解析器,它能够解析HTML文档并将其...
- `HTMLParser抽取Web网页正文信息.doc`: 这份文档可能详细介绍了如何使用HTMLParser来提取网页正文内容,包括步骤和示例代码。 - `htmlparser文档.doc`: 这应是HTMLParser的官方或第三方文档,包含了API介绍、...
2. **信息抽取**:在数据挖掘、内容分析等领域,可以使用HTMLParser提取HTML文档中的关键信息。 3. **页面转换**:可以将HTML页面转换为其他格式,如XML、JSON,或者进行HTML到HTML的转换。 4. **网页自动化**:...
在进行大规模信息抽取时,这个工具可以帮助用户快速获取目标站点的所有页面,为后续的分析和处理提供原始数据。它可能包括爬虫功能,遵循HTTP协议,自动跟踪链接并下载相关资源。 5. **thumbelina.jar**:...
在Web抓取或数据挖掘领域,HTMLParser是一个常用的工具,可以帮助我们从HTML源码中抽取有价值的文本信息,如网页正文、标题等。 在提供的代码片段中,`cleanHtml` 方法展示了如何使用正则表达式来清理HTML,移除...
文章详细描述了基于HttpClient与HTMLParser实现的网页正文提取方法,该方法能够快速有效抓取HTML页面,并提取出所需的文本内容。由于文章内容中有些部分是通过OCR扫描转换的文字,可能存在字识别错误或漏识别的情况...
4. 清洗和抽取数据:Jsoup还提供了清理HTML、提取文本、获取属性值等功能,方便从HTML中提取所需信息。 5. 存储和处理数据:提取到的数据通常需要进一步处理,如存储到数据库、写入文件或者进行数据分析。 在网络...
然后,HtmlParser 解析这些内容,找出页面中的链接或其他感兴趣的元素。这个过程可以递归进行,以爬取整个网站或指定深度的链接。 **开发环境** 为了使用HttpClient和HtmlParser,开发者需要安装JDK并配置环境变量...
传统的网页正文抽取方法主要依赖于规则匹配,而基于统计的方法则更注重从大量网页数据中学习和推断正文特征。 在本案例中,使用了名为htmlparser的网页分析器。这是一个Java库,专门用于解析HTML文档,帮助开发者...
1. `htmlparser-2.1.jar`:这是`htmlparser`库的二进制文件,包含了所有相关的类和方法,可以让开发者在项目中直接引用,进行HTML解析和处理。 2. `htmllexer.jar`:这是`htmllexer`库的二进制文件,作为`htmlparser...
在IT领域,HTML解析是网页数据抽取、网站自动化测试等任务中的关键技术。"DIHtmlParser_5.0.0.rar_...通过理解和运用这个库,开发者可以更高效地进行网页数据抓取、页面自动化测试等任务,提升项目开发的效率和质量。
- **导入库**:首先在项目中引入HTMLParser的jar包,这样就可以在Java代码中使用库提供的类和方法。 - **创建Parser对象**:通过`URLConnection`获取网页内容,然后初始化Parser对象,设置合适的字符编码。 - **解析...
通过使用HTMLParser,该爬虫可以识别并抽取这些关键信息,将其存储到本地或者数据库中,以便于分析和后续使用。这为人力资源部门或求职者提供了快速获取大量职位数据的可能,无需手动浏览网页。 程序的编写需要JDK...