HTML Parser 简述:这是一个在 SourceForge.net 上比较活跃的项目之一,目前的最新版本是 1.6 发行版, (我现在用在 自己NBA网站上 的也是1.6).他是一个对现有的 HTML 进行分析的快速实时的解析器,事实上在应用过程中你更为惊叹于 HTML Parser 给你带来一些周到的处理。他主要用在这几个方面:
文本信息抽取,
链接提取,用于自动给页面的链接文本加上链接的标签
资源提取,例如对一些图片、声音的资源的处理
链接检查,用于检查HTML中的链接是否有效
页面内容的监控
呵呵.废话少说:)上代码.
public class BaseAction {
public static final Logger logger = Logger.getLogger(BaseAction.class);
public String keyWords = "姚明|姚明NBA";
public static NodeList getAllNodeList(String urlOrfile, NodeFilter filter) {
if (logger.isDebugEnabled())
logger.debug("BaseAction getAllNodeList(" + urlOrfile + ")");
Parser parser;
try {
parser = new Parser(urlOrfile);
parser.setEncoding(Constent.Encode);
NodeList list = parser.parse(filter);
return list;
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 取link 与textnode 返回的是href连接
*
* @param file
* @param filter
* @return
*/
public List<String> parseLink(String file, NodeFilter filter) {
if (logger.isDebugEnabled())
logger.debug("BaseAction parseLink(" + file + ")");
List<String> hrefList = new ArrayList<String>();
try {
NodeList nodelist = getAllNodeList(file, filter);
if(nodelist==null)
return null;
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();
logger.debug("textnode=" + line);
} else if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
logger.debug("link=" + line);
}
if (HttpParserUtil.isTrimEmpty(line))
continue;
hrefList.add(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return hrefList;
}
/**
* 取link 与textnode 返回的是href连接
*
* @param file
* @param filter
* @return
*/
public Map<String, String> parseLinkWithText(String file,
NodeFilter filter, Pattern pHtml, Pattern pPhp) {
if (logger.isDebugEnabled())
logger.debug("SinaAction parseLinkWithText(" + file + ")");
Map<String, String> map = new HashMap<String, String>();
List<String> list = new ArrayList<String>();
try {
NodeList nodelist = getAllNodeList(file, filter);
if(nodelist==null)
return null;
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();
if (HttpParserUtil.isTrimEmpty(line))
continue;
if (logger.isDebugEnabled())
logger.debug("textnode=" + line);
list.add(line);
} else if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
if (HttpParserUtil.isTrimEmpty(line))
continue;
if (logger.isDebugEnabled())
logger.debug("link=" + line);
list.add(line);
}
}
int endPostion = list.size();
for (int i = 0; i < endPostion; i++) {
String getCurr = list.get(i);
Matcher mHtml = pHtml.matcher(getCurr);
Matcher mPhp = pPhp.matcher(getCurr);
if ((mHtml.matches() == true || mPhp.matches() == true)
&& i < (endPostion - 1)) {
String getNext = list.get(i + 1);
Matcher mHtmlNext = pHtml.matcher(getNext);
Matcher mPhpNext = pPhp.matcher(getNext);
if ((mHtml.matches() == true && mHtmlNext.matches() == false)
|| (mPhp.matches() == true && mPhpNext.matches() == false)) {
map.put(getCurr, getNext);
i = i + 1;
} else {
}
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return map;
}
/**
* 分析内容
*
* @param list
* @return
*/
public String parserContent(NodeList list) {
return parserContent(list, false);
}
public String parserContent(NodeList list, boolean isCreateFile) {
return parserContent(list,isCreateFile,list.size()+1);
}
public String parserContent(NodeList list, int listIndex) {
return parserContent(list,false,listIndex);
}
public String parserContent(NodeList list, boolean isCreateFile,int listIndex) {
if (logger.isDebugEnabled())
logger.debug("BaseAction parserContent()");
StringBuffer content = new StringBuffer();
if(list.size() < listIndex){//说明是整个取出进行rex
for (int i = 0; i < list.size(); i++) {
Node node = list.elementAt(i);
NodeList sublist = node.getChildren();
if (sublist == null)
continue;
Node[] listNode = sublist.toNodeArray();
for (Node inNode : listNode) {
if (HttpParserUtil.isTrimEmpty(inNode.getText()))
continue;
logger.debug(inNode.toHtml());
content.append(inNode.toHtml());
if (isCreateFile)
content.append("\n");
}
}
}else{
Node node = list.elementAt(listIndex);
if (node == null){
logger.warn("the listIndex may is wrong! please do it");
return null;
}
NodeList sublist = node.getChildren();
if (sublist == null){
logger.warn("the listIndex may is wrong! please do it");
return null;
}
Node[] listNode
public static final Logger logger = Logger.getLogger(BaseAction.class);
public String keyWords = "姚明|姚明NBA";
public static NodeList getAllNodeList(String urlOrfile, NodeFilter filter) {
if (logger.isDebugEnabled())
logger.debug("BaseAction getAllNodeList(" + urlOrfile + ")");
Parser parser;
try {
parser = new Parser(urlOrfile);
parser.setEncoding(Constent.Encode);
NodeList list = parser.parse(filter);
return list;
} catch (ParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
/**
* 取link 与textnode 返回的是href连接
*
* @param file
* @param filter
* @return
*/
public List<String> parseLink(String file, NodeFilter filter) {
if (logger.isDebugEnabled())
logger.debug("BaseAction parseLink(" + file + ")");
List<String> hrefList = new ArrayList<String>();
try {
NodeList nodelist = getAllNodeList(file, filter);
if(nodelist==null)
return null;
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();
logger.debug("textnode=" + line);
} else if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
logger.debug("link=" + line);
}
if (HttpParserUtil.isTrimEmpty(line))
continue;
hrefList.add(line);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return hrefList;
}
/**
* 取link 与textnode 返回的是href连接
*
* @param file
* @param filter
* @return
*/
public Map<String, String> parseLinkWithText(String file,
NodeFilter filter, Pattern pHtml, Pattern pPhp) {
if (logger.isDebugEnabled())
logger.debug("SinaAction parseLinkWithText(" + file + ")");
Map<String, String> map = new HashMap<String, String>();
List<String> list = new ArrayList<String>();
try {
NodeList nodelist = getAllNodeList(file, filter);
if(nodelist==null)
return null;
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();
if (HttpParserUtil.isTrimEmpty(line))
continue;
if (logger.isDebugEnabled())
logger.debug("textnode=" + line);
list.add(line);
} else if (node instanceof LinkTag) {
LinkTag link = (LinkTag) node;
line = link.getLink();
if (HttpParserUtil.isTrimEmpty(line))
continue;
if (logger.isDebugEnabled())
logger.debug("link=" + line);
list.add(line);
}
}
int endPostion = list.size();
for (int i = 0; i < endPostion; i++) {
String getCurr = list.get(i);
Matcher mHtml = pHtml.matcher(getCurr);
Matcher mPhp = pPhp.matcher(getCurr);
if ((mHtml.matches() == true || mPhp.matches() == true)
&& i < (endPostion - 1)) {
String getNext = list.get(i + 1);
Matcher mHtmlNext = pHtml.matcher(getNext);
Matcher mPhpNext = pPhp.matcher(getNext);
if ((mHtml.matches() == true && mHtmlNext.matches() == false)
|| (mPhp.matches() == true && mPhpNext.matches() == false)) {
map.put(getCurr, getNext);
i = i + 1;
} else {
}
}
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return map;
}
/**
* 分析内容
*
* @param list
* @return
*/
public String parserContent(NodeList list) {
return parserContent(list, false);
}
public String parserContent(NodeList list, boolean isCreateFile) {
return parserContent(list,isCreateFile,list.size()+1);
}
public String parserContent(NodeList list, int listIndex) {
return parserContent(list,false,listIndex);
}
public String parserContent(NodeList list, boolean isCreateFile,int listIndex) {
if (logger.isDebugEnabled())
logger.debug("BaseAction parserContent()");
StringBuffer content = new StringBuffer();
if(list.size() < listIndex){//说明是整个取出进行rex
for (int i = 0; i < list.size(); i++) {
Node node = list.elementAt(i);
NodeList sublist = node.getChildren();
if (sublist == null)
continue;
Node[] listNode = sublist.toNodeArray();
for (Node inNode : listNode) {
if (HttpParserUtil.isTrimEmpty(inNode.getText()))
continue;
logger.debug(inNode.toHtml());
content.append(inNode.toHtml());
if (isCreateFile)
content.append("\n");
}
}
}else{
Node node = list.elementAt(listIndex);
if (node == null){
logger.warn("the listIndex may is wrong! please do it");
return null;
}
NodeList sublist = node.getChildren();
if (sublist == null){
logger.warn("the listIndex may is wrong! please do it");
return null;
}
Node[] listNode
相关推荐
"htmlparser-1.6p.jar"是该库的特定版本,用于在Java环境中集成和使用。 HTMLParser的核心功能包括: 1. **标签和属性处理**:它可以识别并解析HTML文档中的各种标签,如`<html>`, `<head>`, `<body>`等,同时处理...
HTMLParser-2.0-SNAPSHOT 是一个针对Web信息抽取的软件包,它包含了多个核心组件,用于解析和处理HTML文档。在这个版本中,我们主要关注以下五个关键库: 1. **filterbuilder.jar**:这是一个过滤器构建工具,用于...
在使用HTMLParser-C++时,开发人员需要包含相关的头文件,如`htmlparser.h`,然后创建解析器实例,例如`HTMLParser parser`。解析器通常会有一个解析HTML字符串或文件的方法,如`parseString`或`parseFile`。解析...
总之,HTMLParser是Java开发人员处理HTML解析任务的强大工具,其API文档HTMLParser-2.0-API.CHM是学习和使用这个库的重要资源,能帮助开发者快速上手并有效地利用HTMLParser进行网页数据提取和分析。
在网页分析中,HTMLParser扮演着核心角色,它能够帮助开发者有效地处理HTML源代码,提取所需的信息,甚至进行DOM(Document Object Model)操作。以下是对HTMLParser及其相关知识点的详细说明: 1. HTML解析:...
标题中的“lucene_JE分词_htmlParser--jar包”表明这是一个包含与Lucene、JE分词和HTMLParser相关的Java库的集合。这些组件在IT领域中有着特定的应用,特别是对于文本处理和搜索引擎构建。 首先,让我们详细了解...
1. `htmlparser-2.1.jar`:这是`htmlparser`库的二进制文件,包含了所有相关的类和方法,可以让开发者在项目中直接引用,进行HTML解析和处理。 2. `htmllexer.jar`:这是`htmllexer`库的二进制文件,作为`htmlparser...
2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是HTMLParser库的API文档,包含了详细的Javadoc。通过解压并查阅这个文档,开发者可以了解每个类、方法和接口的功能,这对于理解和使用库中的各种功能至关重要。 3. **...
1. **导入库**:首先需要将htmlparser1_6.jar添加到项目类路径中,以便在代码中使用HTMLParser的相关类和方法。 2. **创建解析器**:创建一个HTMLParser实例,然后设置解析选项,如是否忽略错误或使用特定的解析策略...
在这个项目“HTML分析器——htmlparser1-4_20”中,我们可能涉及到了一系列的HTML解析技术与实践。 首先,HTML解析器的核心功能是对HTML标记语言进行解析,识别出标签、属性、文本等内容。这通常包括词法分析(将...
本文将详细介绍如何利用HtmlParser这一开源工具来提取网页中的关键信息,并通过数据清洗将其存储到SQL数据库中,以便后续的数据分析和应用。 #### 二、HtmlParser概述 HtmlParser是一种轻量级、高效且易于使用的...
例如,你可以使用HTMLParser解析整个网页,然后通过XPath找到特定的元素,如所有的链接(`<a>`标签)。这在进行网络爬虫开发时非常有用,可以提取出网页中的所有链接,进行进一步的分析或者访问。 HTMLParser库还...
1. **HTMLParser基本概念**: - HTMLParser是一个开源的Java库,它提供了API来解析HTML文档,支持处理HTML标签、属性、文本等元素。 - 库中的主要类包括`Parser`,它是解析HTML文档的主要入口点,以及`Node`和`...
它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便地解析HTML文档,查找特定元素,提取数据,或者修改文档结构。然而,关于HTMLParser的具体用法和示例未在描述中给...
这个框架主要适用于那些需要从HTML文档中提取数据、分析网页结构或者进行自动化测试等场景。在很多Web抓取、信息提取以及网页分析的项目中,HTMLParser都是一个理想的工具。 HTMLParser库的设计考虑了易用性和灵活...
1. **加载HTML文档**:使用HTMLParser加载待分析的HTML文档。 2. **定义过滤器**:根据需求定义过滤器来筛选出包含超链接的HTML元素。 3. **提取超链接**:遍历匹配到的HTML元素,提取出其中的超链接。 下面是一个...
总之,Objective-C的HTMLParser为iOS和macOS开发者提供了一种有效处理HTML文档的方法,它简化了网页数据的提取和分析过程,是构建网络相关应用的重要工具。通过学习和实践,开发者可以提高自己的技能,为用户提供...
而"需要使用的lib"则表明除了HTMLParser之外,可能还需要其他库,比如`urllib`或`requests`用于发送HTTP请求,`re`进行正则表达式匹配,甚至`pandas`用于数据清洗和分析。 总结来说,"htmlparser抓取网页内容"项目...
使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...