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

htmlparser使用(三)

    博客分类:
  • JAVA
阅读更多

       出处:http://blog.csdn.net/redez/archive/2005/11/21/534277.aspx
       说明:本文参考HTMLParser使用,并在该文的基础上进行了部分修改。
一. 简介
       htmlparser用于 对html页面进行解析,它是一个功能比较强大的工具。
       项目首页http://htmlparser.sourceforge.net/
       下载地址http://sourceforge.net/project/showfiles.php?group_id=24399
二. 使用举例
       下面通过一个简单的htmlparser的使用举例,来学习htmlparser的使用。代码如下:

package com.amigo.htmlparser;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

import org.htmlparser.filters.*;
import org.htmlparser.*;
import org.htmlparser.nodes.*;
import org.htmlparser.tags.*;
import org.htmlparser.util.*;
import org.htmlparser.visitors.*;

/** *//**
 * 测试HTMLParser的使用.
 * @author <a href="mailto:xiexingxing1121@126.com">AmigoXie</a>
 * Creation date: 2008-1-18 - 上午11:44:22
 */
public class HTMLParserTest {
    /** *//**
     * 入口方法.
     * @param args
     * @throws Exception
     */
    public static void main(String args[]) throws Exception {
        String path = "http://www.blogjava.net/amigoxie";
        URL url = new URL(path);
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true); 
        
        InputStream inputStream = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(inputStream, "utf8");
        StringBuffer sb = new StringBuffer();
        BufferedReader in = new BufferedReader(isr);
        String inputLine;
        
        while ((inputLine = in.readLine()) != null) {
            sb.append(inputLine);
            sb.append("\n");
        }
        
        String result = sb.toString();

        readByHtml(result);
        readTextAndLinkAndTitle(result);
    }
    
    /** *//**
     * 按页面方式处理.解析标准的html页面
     * @param content 网页的内容
     * @throws Exception
     */
    public static void readByHtml(String content) throws Exception {
        Parser myParser;
        myParser = Parser.createParser(content, "utf8");
        HtmlPage visitor = new HtmlPage(myParser);
        myParser.visitAllNodesWith(visitor);

        String textInPage = visitor.getTitle();
        System.out.println(textInPage);
        NodeList nodelist;
        nodelist = visitor.getBody();
        
        System.out.print(nodelist.asString().trim());
    }

    /** *//**
     * 分别读纯文本和链接.
     * @param result 网页的内容
     * @throws Exception
     */
    public static void readTextAndLinkAndTitle(String result) throws Exception {
        Parser parser;
        NodeList nodelist;
        parser = Parser.createParser(result, "utf8");
        NodeFilter textFilter = new NodeClassFilter(TextNode.class);
        NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
        NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
        OrFilter lastFilter = new OrFilter();
        lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });
        nodelist = parser.parse(lastFilter);
        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();
            } else if (node instanceof LinkTag) {
                LinkTag link = (LinkTag) node;
                line = link.getLink();
            } else if (node instanceof TitleTag) {
                TitleTag titlenode = (TitleTag) node;
                line = titlenode.getTitle();
            }
            
            if (isTrimEmpty(line))
                continue;
            System.out.println(line);
        }
    }
    
    /** *//**
     * 去掉左右空格后字符串是否为空
     */
    public static boolean isTrimEmpty(String astr) {
        if ((null == astr) || (astr.length() == 0)) {
            return true;
        }
        if (isBlank(astr.trim())) {
            return true;
        }
        return false;
    }

    /** *//**
     * 字符串是否为空:null或者长度为0.
     */
    public static boolean isBlank(String astr) {
        if ((null == astr) || (astr.length() == 0)) {
            return true;
        } else {
            return false;
        }
    }
}

 

分享到:
评论

相关推荐

    Winista.Htmlparser.Net 源码 +Demo

    三、使用示例(Demo) 压缩包中的`AnalyzeHtml.sln`是解决方案文件,包含了项目的配置信息。`HtmlParser2003`可能是一个早期版本的源代码,而`AnalyzeHtml`和`WebParser`则可能是演示如何使用HtmlParser的项目。 1...

    HtmlParser源码及其jar包

    HTMLParser提供了三种主要的操作方式来处理HTML内容: 1. **事件驱动解析**:通过注册事件处理器,当HTML解析器遇到特定的HTML标签或元素时,会触发相应的事件。例如,当解析到`&lt;div&gt;`标签时,可以调用预先定义的...

    HTMLParser 2.0

    HTMLParser库的一个重要优势是它不依赖于第三方库,因此对于简单的HTML解析任务,它是轻量级且方便的选择。然而,对于复杂的HTML文档,特别是那些包含CSS选择器和JavaScript的现代网页,可能需要更强大的库如...

    HtmlParser的使用

    以下是对`HtmlParser`的详细解释和使用方法: 一、HTMLParser简介 HTMLParser提供了对HTML文档的解析能力,能够识别HTML标签、属性、文本内容等元素。它的设计目标是易于使用且健壮,即使面对不规则或非标准的HTML...

    HtmlParser提取网页信息的设计与实现

    为了更直观地展示如何使用HtmlParser提取网页信息,下面给出一个简单的示例: 假设我们需要从一个新闻网站的主页上提取所有的新闻标题及其对应的链接。首先,使用HtmlParser解析主页的HTML代码,然后查找所有的`&lt;a&gt;...

    htmlparser使用指南

    三、使用方法 1. **添加依赖**:在项目中引入HTMLParser库,通常通过Maven或Gradle进行管理。 2. **创建解析器**:初始化一个`HTMLParser`实例,配置解析规则和事件处理器。 3. **解析HTML**:调用`parse()`方法...

    HTMLParser 2.0最新jar API 源代码

    将此jar包添加到项目的类路径中,就可以在程序中使用HTMLParser提供的各种解析功能了。 HTMLParser库的核心功能包括: - **HTML解析**:库能够解析HTML文档,并将其转化为一个可操作的结构,比如树形结构。这使得...

    Winista.HTMLParser源码

    1. 网页数据抓取:创建一个简单的爬虫,使用Winista.HTMLParser解析目标网页,然后通过CSS选择器提取特定内容,例如新闻标题、发布时间等。 2. 存储与检索:爬取的大量网页数据可以被压缩存储,当需要时,通过...

    Winista.HtmlParser

    三、核心概念与使用方法 1. **解析器初始化**:首先,创建一个HtmlParser实例,然后调用其ParseDocument或ParseFragment方法加载HTML内容。 2. **CSS选择器查询**:使用SelectElements或SelectSingleNode方法,...

    使用 HttpClient 和 HtmlParser 实现简易爬虫

    #### 三、HttpClient的基本使用 **HttpGet请求:** HttpGet请求是最常见的HTTP请求类型之一,用于从服务器获取资源。使用HttpClient发起HttpGet请求涉及以下步骤: 1. **创建HttpClient实例:** ```java ...

    HTMLParser

    5. **第三方库集成**:压缩包中的其他文件可能包含了与HTMLParser相关的扩展或工具。例如: - `htmllexer.jar` 可能是HTMLLexer,一个用于生成HTMLParser事件的词法分析器。 - `filterbuilder.jar` 可能包含过滤器...

    HTMLParser的使用

    HTMLParser还提供了很多高级功能,例如自定义节点处理器、使用正则表达式过滤节点、解析CSS选择器等。你可以通过继承`NodeVisitor`接口,实现自己的访问者模式,对HTML文档进行更复杂的操作。此外,还可以结合`...

    htmlparser实现爬虫

    #### 五、HTMLParser使用示例 HTMLParser提供了一系列API用于解析HTML文档。以下是一些常用的方法示例: - `Parser createParser(String html, String charset)`:基于输入的字符串创建解析器。 - `void ...

    基于HTMLParser的Web信息抽取系统的设计与实现

    例如,在提取电子邮件地址时,可以使用HTMLParser结合正则表达式来识别符合电子邮件格式的文本。 ### 正则表达式的应用 正则表达式是一种强大的文本匹配工具,广泛应用于字符串搜索和替换中。在Web信息抽取中,...

    正则表达式+_HTMLParser使用详解-2010-03-21

    6. **其他解析库**:除了HTMLParser,Python还有BeautifulSoup等第三方库,提供了更高级的HTML解析功能,如树形结构、CSS选择器支持等。 结合这两种工具,我们可以实现诸如从HTML页面中提取特定数据、验证字符串...

    htmlparser中文文档

    #### 三、HTMLParser的安装与集成 HTMLParser作为一个独立的Java库,可以通过以下方式添加到项目中: 1. **Maven**:通过在`pom.xml`文件中添加依赖来集成。 2. **Gradle**:在`build.gradle`文件中添加依赖。 ####...

    c#使用HtmlParser建立文档树 DomTree

    在本教程中,我们将深入探讨如何使用HtmlParser库来实现这一目标。 首先,我们需要了解什么是HtmlParser。HtmlParser是.NET生态系统中一个高效的HTML解析器,它可以解析HTML字符串或流,并将其转换为易于操作的对象...

Global site tag (gtag.js) - Google Analytics