利用htmlparser进行网页信息的抽取
2006-08-29 21:54
这是个好东西,有相见恨晚之意,也比较容易上手,对很多的功能都进行了封装,做信息采集的朋友应该尽快使用它来做抓取工作.下面给一个完整的例子:
这是一个用来抽取某个网站中产品评论的类,有兴趣的朋友可以仔细看下,欢迎交流!
package com;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.AndFilter;
import org.htmlparser.filters.HasAttributeFilter;
import org.htmlparser.filters.HasChildFilter;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.Span;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.util.NodeList;
class WrapperComment implements CatchCommentInterface{
String url="";//define a visit url
StringBuffer sb=new StringBuffer();//to sava the replaced content
WrapperComment(String newsLink){//define a constructor
this.url=newsLink;
}
public String getPageContent(){
String pageContent="";
try{
Parser parser=new Parser(url);//contructor
parser.setEncoding("GB2312");//set encode
TagNameFilter bodyFilter=new TagNameFilter("body");//get the body content
NodeList nodelist=parser.extractAllNodesThatMatch(bodyFilter);
pageContent=nodelist.toHtml();//output pagecontent
}catch(Exception e){
e.printStackTrace();
}
return pageContent;
}
public NodeList getTableContent(String content){
NodeList nodelist=null;
NodeFilter[] nodeFilter=new NodeFilter[3];
try{
Parser parser=new Parser(content);//contructor
parser.setEncoding("GB2312");//set encode
TagNameFilter tableFilter=new TagNameFilter("table");//get the table content
HasAttributeFilter tableAttribute=new HasAttributeFilter("bgcolor","#cfe0fc");//hava the attribute "bgcolor"
HasAttributeFilter tableAttribute2=new HasAttributeFilter("width","100%");//hava the attribute "width"
nodeFilter[0]=tableFilter;
nodeFilter[1]=tableAttribute;
nodeFilter[2]=tableAttribute2;
AndFilter andFilter=new AndFilter(nodeFilter);//to link the three filter that above together
nodelist=parser.extractAllNodesThatMatch(andFilter);//get the result that fit for the filter
nodelist.remove(nodelist.size()-1);//to remove the last element
}catch(Exception e){
e.printStackTrace();
}
return nodelist;
}
public void getCommentDetail(NodeList nodelist){
int nodesize=nodelist.size();
String tableContent="";
for(int i=0;i tableContent=nodelist.elementAt(i).toHtml();
System.out.println(getCommentTime(tableContent));
System.out.println(getCommentText(tableContent));
System.out.println("----------------------------------");
}
}
public String getCommentTime(String content){
String commentTime="";
String tempText="";
try{
Parser parser=new Parser(content);
parser.setEncoding("GB2312");
TagNameFilter trFilter=new TagNameFilter("td");
TagNameFilter bFilter=new TagNameFilter("b");
HasChildFilter childFilter=new HasChildFilter(bFilter);
AndFilter andFilter=new AndFilter(trFilter,childFilter);
NodeList nodelist=parser.extractAllNodesThatMatch(andFilter);
TableColumn td=(TableColumn)nodelist.elementAt(0);
tempText=td.toHtml();
String regx="2006-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}";
Pattern pattern=Pattern.compile(regx);
Matcher matcher=pattern.matcher(tempText);
if(matcher.find()){
commentTime=matcher.group();
}else{
commentTime="no find";
}
}catch(Exception e){
e.printStackTrace();
}
return commentTime;
}
public String getCommentText(String content){
String commentText="";
int nodesize;
try{
Parser parser=new Parser(content);
parser.setEncoding("GB2312");
NodeClassFilter span=new NodeClassFilter(Span.class);
HasAttributeFilter idFilter=new HasAttributeFilter("id");
AndFilter andFilter=new AndFilter(span,idFilter);
NodeList nodelist=parser.extractAllNodesThatMatch(andFilter);
nodesize=nodelist.size();
for(int i=0;i Span sp=(Span)nodelist.elementAt(i);
commentText=commentText+sp.toPlainTextString();
}
}catch(Exception e){
e.printStackTrace();
}
return commentText;
}
}
分享到:
相关推荐
META-INF/maven/org.htmlparser/htmlparser/pom.properties META-INF/maven/org.htmlparser/htmlparser/pom.xml org.htmlparser.Parser.class org.htmlparser.PrototypicalNodeFactory.class org.htmlparser.beans....
在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...
`HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1. **AnalyzeHtml**:这个项目可能展示了如何分析HTML文档,通过调用HtmlParser的API来提取...
在提供的压缩包中,`HTMLParser-2.0-SNAPSHOT-bin`可能是可执行的二进制文件,包括了编译好的JAR文件和其他运行所需的资源。而`HTMLParser-2.0-SNAPSHOT`可能包含了源代码,这对于开发者来说是宝贵的,因为他们可以...
`htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...
本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...
下面将详细阐述Winista.HtmlParser的相关知识点。 1. **HTML解析原理**: HTML解析器的工作原理是对HTML源码进行分析,识别出标签、属性、文本等内容。Winista.HtmlParser可能采用了基于DOM(文档对象模型)或SAX...
在很多Web抓取、信息提取以及网页分析的项目中,HTMLParser都是一个理想的工具。 HTMLParser库的设计考虑了易用性和灵活性,它提供了丰富的API,允许开发者通过编程方式来访问和操作HTML文档的各个元素,如标签、...
在“htmlparser.jar”中,包含了HTMLParser库的所有类和方法,使得开发人员可以将这个库集成到他们的Java项目中。使用jar文件,开发者可以直接导入并使用HTMLParser的API来解析和操作HTML文档。 "htmlparser实现从...
以下是对HTMLParser及其相关知识点的详细说明: 1. HTML解析:HTMLParser的设计目的是为了处理HTML文档的非结构化特性。由于HTML经常存在不规范的情况,如缺少闭合标签、嵌套错误等,HTMLParser通过容错机制,能够...
HTMLParser提供了两种主要的解析方式:事件驱动和DOM(Document Object Model)模型。这两个jar包——htmlparser.jar和htmllexer.jar,包含了实现这些功能所需的类和方法。 htmlparser.jar是核心库,它包含了...
htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载
《C# HTMLParser详解及其应用》 在编程领域,处理HTML文档是一项常见的任务,尤其是在Web开发中。C#作为微软推出的面向对象的编程语言,拥有丰富的库和工具来支持这项工作。本文将深入探讨C#中的HTMLParser,以及...
**HtmlParser 2.1 知识点详解** HtmlParser是一个强大的开源库,主要用于解析HTML文档,它在处理不规则的HTML结构时表现出了极高的灵活性和稳定性。这个"HtmlParser 2.1 码源"是该库的2015年6月的最新版本,包含了...
- `htmlparser1_6_20060610.zip`:这是HTMLParser的一个较早版本,发布于2006年6月10日。它可能包含旧版API和特性,对于需要兼容旧项目或研究历史版本的人来说是有价值的。 - `HTMLParser-2.0-SNAPSHOT-src.zip`:...
以下是对`HtmlParser`及其相关知识点的详细说明: 1. **HTML解析**:HTMLParser提供了对HTML文档的解析能力,将HTML文本转换为可操作的对象模型。它能够处理嵌套标签、属性、注释以及实体引用等HTML元素。 2. **...
`HTMLParser-2[1].0-API.CHM`文件是HTMLParser2.0的API参考手册,它包含了详细的API文档,为开发者提供了如何使用这个库的指南。通过这个手册,开发者可以学习如何创建解析器实例,设置解析选项,注册事件处理器,...