`
hefan
  • 浏览: 45776 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HtmlParser

阅读更多

利用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;

}

}

分享到:
评论

相关推荐

    htmlparser

    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....

    htmlparser.jar文件

    在描述中提到的“org.htmlparser.Node”和其他的.class文件,这些都是HTMLParser库的核心组成部分。`org.htmlparser.Node` 是HTMLParser中的一个关键接口,它代表HTML文档中的一个节点,可以是元素(Element)、注释...

    Winista.Htmlparser.Net 源码 +Demo

    `HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1. **AnalyzeHtml**:这个项目可能展示了如何分析HTML文档,通过调用HtmlParser的API来提取...

    java解析html工具htmlparser的jar包及api文档

    在提供的压缩包中,`HTMLParser-2.0-SNAPSHOT-bin`可能是可执行的二进制文件,包括了编译好的JAR文件和其他运行所需的资源。而`HTMLParser-2.0-SNAPSHOT`可能包含了源代码,这对于开发者来说是宝贵的,因为他们可以...

    c#版htmlparser htmlparser.dll htmlparser源代码

    `htmlparser.dll`是这个库的动态链接库文件,它包含了编译好的类和方法,可以直接在C#项目中引用以使用HTMLParser的功能。在C#项目中,我们可以通过添加对dll的引用来调用库中的方法,比如解析HTML字符串、查找特定...

    HTMLParser.net源代码HTMLParser.net使用demo

    本项目名为"HTMLParser.net源代码HTMLParser.net使用demo",显然是一个包含示例代码的压缩包,用于展示如何在实际应用中使用HTMLParser.net。 HTMLParser.net的核心功能包括: 1. **HTML解析**:它能够将HTML字符...

    Winista.HtmlParser(含帮助手册)

    下面将详细阐述Winista.HtmlParser的相关知识点。 1. **HTML解析原理**: HTML解析器的工作原理是对HTML源码进行分析,识别出标签、属性、文本等内容。Winista.HtmlParser可能采用了基于DOM(文档对象模型)或SAX...

    htmlParser.jar包

    在很多Web抓取、信息提取以及网页分析的项目中,HTMLParser都是一个理想的工具。 HTMLParser库的设计考虑了易用性和灵活性,它提供了丰富的API,允许开发者通过编程方式来访问和操作HTML文档的各个元素,如标签、...

    htmlparser库与教程

    在“htmlparser.jar”中,包含了HTMLParser库的所有类和方法,使得开发人员可以将这个库集成到他们的Java项目中。使用jar文件,开发者可以直接导入并使用HTMLParser的API来解析和操作HTML文档。 "htmlparser实现从...

    htmlparser网页分析

    以下是对HTMLParser及其相关知识点的详细说明: 1. HTML解析:HTMLParser的设计目的是为了处理HTML文档的非结构化特性。由于HTML经常存在不规范的情况,如缺少闭合标签、嵌套错误等,HTMLParser通过容错机制,能够...

    htmlparser的jar包

    HTMLParser提供了两种主要的解析方式:事件驱动和DOM(Document Object Model)模型。这两个jar包——htmlparser.jar和htmllexer.jar,包含了实现这些功能所需的类和方法。 htmlparser.jar是核心库,它包含了...

    htmlparser-1.2.1 jar

    htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载

    C# HTMLParser下载.rar

    《C# HTMLParser详解及其应用》 在编程领域,处理HTML文档是一项常见的任务,尤其是在Web开发中。C#作为微软推出的面向对象的编程语言,拥有丰富的库和工具来支持这项工作。本文将深入探讨C#中的HTMLParser,以及...

    HtmlParser 2.1 码源

    **HtmlParser 2.1 知识点详解** HtmlParser是一个强大的开源库,主要用于解析HTML文档,它在处理不规则的HTML结构时表现出了极高的灵活性和稳定性。这个"HtmlParser 2.1 码源"是该库的2015年6月的最新版本,包含了...

    HtmlParser源码及其jar包

    - `htmlparser1_6_20060610.zip`:这是HTMLParser的一个较早版本,发布于2006年6月10日。它可能包含旧版API和特性,对于需要兼容旧项目或研究历史版本的人来说是有价值的。 - `HTMLParser-2.0-SNAPSHOT-src.zip`:...

    HtmlParser源码及demo

    以下是对`HtmlParser`及其相关知识点的详细说明: 1. **HTML解析**:HTMLParser提供了对HTML文档的解析能力,将HTML文本转换为可操作的对象模型。它能够处理嵌套标签、属性、注释以及实体引用等HTML元素。 2. **...

    htmlparser2.0_dll+htmlparserAPI

    `HTMLParser-2[1].0-API.CHM`文件是HTMLParser2.0的API参考手册,它包含了详细的API文档,为开发者提供了如何使用这个库的指南。通过这个手册,开发者可以学习如何创建解析器实例,设置解析选项,注册事件处理器,...

Global site tag (gtag.js) - Google Analytics