`
yysct2005
  • 浏览: 90698 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

htmlparser使用举例

    博客分类:
  • java
阅读更多

原文出处------------http://qzone.qq.com/blog/22340638-1212662447

 

htmlparser使用举例
HTMLParser 一个解析web页面的开源类库, 他有两种主要使用方式, extraction和transformation. 前者就是从网页中萃取出你要的东西,后者就是把web页面中的一些内容改为(转换为)你想要的格式. 下面来看看这两种使用情况的各自特点.
Extraction
萃取例如下面的几种常见的使用方式:
    * text extraction, 萃取web页面中的文本文字
    * link extraction,萃取web页面中的连接 包括url 和 email地址, 还可以自定义其他标签
    * screen scraping, 抓去web页面内容
    * resource extraction, 萃取web页面中的资源, 图片 , 声音文件......
    * a browser front end, the preliminary stage of page display
    * link checking, 确保连接是有效的
    * site monitoring, 检查web页面的更改
使用一下几种机制来帮助你实现上面的功能:
filters, visitors and JavaBeans
Transformation
处理web页面的内容, 转换为你需要的.包含:
    * URL rewriting, 更改一个web页面的部分连接or 全部连接为你想要的.
    * site capture, 把远程的网站抓取到本地
    * censorship, 检查web页面内容,移出你不想要的字词
    * HTML cleanup, 整理html格式,
    * ad removal, 过滤广告连接
    * conversion to XML, 转换为xml格式的数据
另外: htmlparser还使用到了几种很好的设计模式.应用的恰到好处, 值得学习和借鉴一下.
这次对htmlparser的简单介绍先介绍到这里, 在以后的时间里 根据具体的应用在写一些例子, 给大家参考一下(htmlparser源代码中也有几个例子,建议看看).  

下面通过一个简单的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="liuqlmailto:liuql-ja@163.com">liuql</a>
* Creation date: 2008-6-5 - 上午11:44:22
*/
public class HTMLParserTest {
    /** *//**
     * 入口方法.
     * @param args
     * @throws Exception
     */
    public static void main(String args[]) throws Exception {
        String path = "http://www.163.com";
        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;
            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;
        }
    }
}

分享到:
评论

相关推荐

    HTMLParser 使用举例

    HTMLParser 使用举例 HTMLParser 是一个开源的类库,用于解析 Web 页面。它有两种主要使用方式:extraction 和 transformation。前者用于从网页中萃取出需要的内容,后者用于把 Web 页面中的内容转换为需要的格式。...

    htmlParser详细文档

    - `HTMLParser使用举例.doc`: 提供了具体的使用案例,帮助理解如何在实际项目中应用HTMLParser。 在学习和使用HTMLParser时,结合上述资源,可以从理论到实践全面掌握这个强大的工具。无论是为了数据抓取、内容...

    HTMLParser使用文档和jar包

    本篇将详细阐述HTMLParser的使用方法、功能以及提供的相关资源。 首先,`HTMLParser-2.0-SNAPSHOT-doc.zip`包含了HTMLParser的使用文档。这份文档通常包含API参考、教程、示例代码和用户指南,是学习和理解...

    JAVA htmlparser 使用实例

    ### JAVA HtmlParser 使用实例详解 在Java开发过程中,解析HTML文档是一项常见的需求,尤其是在处理Web爬虫、数据抓取等应用场景时。`HtmlParser`库为开发者提供了一种简便的方式来解析HTML文档,并从中提取所需的...

    C# HtmlParser使用小实例

    在使用Winista.HtmlParser之前,你需要先将其添加到你的C#项目中。如果你有`htmlparser源代码(bin下有所用dll).rar`文件,你可以从中解压出dll文件并将其添加为项目的引用。在Visual Studio中,右键点击项目,选择...

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

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

    java实现模拟登录网站最全的资料

    `HTMLParser使用详解.doc`和`HTMLParser使用举例.doc`可以提供更深入的指导。 5. **HttpClient库**:Apache HttpClient库是Java中用于发送HTTP请求的流行工具。它可以用来模拟登录,通过设置Cookie管理器来跟踪和...

    HTMLParser 使用文档、jar包、以及源码

    1. **例子.txt**:这是一个包含使用HTMLParser库的实际示例代码的文本文件。开发者可以通过阅读和运行这些示例来快速理解如何在自己的项目中应用HTMLParser。 2. **HTMLParser-2.0-SNAPSHOT-doc.zip**:这是...

    Java正则表达式入门 + HTMLParser使用详解

    除了正则表达式,本话题还提到了HTMLParser的使用。HTMLParser是一个Java库,用于解析HTML文档,提取或修改数据。它可以处理HTML标签、属性、文本等内容,对网页内容进行分析和操作。使用HTMLParser,开发者可以方便...

    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使用详解

    在本文中,我们将深入探讨HTMLParser的使用,包括其核心类`Parser`以及如何初始化和使用它。 首先,`Parser`是HTMLParser库的核心组件,它负责解析HTML页面。`Parser`类提供了多个构造函数,以适应不同的初始化需求...

    网络爬虫 HTMLParser 使用指南

    综上所述,网络爬虫开发者在使用HTMLParser进行开发时,需要了解它的基本原理、核心类和构造函数、调试工具的使用、页面编码设置方法、以及一些基本的代码实践。同时,开发者应该具备良好的问题解决和代码调试能力,...

    htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读htmlparser 使用指南 入门 必读

    HTMLParser的核心使用场景主要有两个:提取(extraction)和转换(transformation)。提取是指从网页中抽取数据,而转换则是指修改或创建新的HTML内容。1.4版本的HTMLParser在转换领域有了显著的改进,简化了标签的创建...

    HTMLParser使用详解.doc

    本文将介绍如何使用 HTMLParser 并提供一些基础的使用示例。 首先,`Parser` 类是 HTMLParser 库的核心,负责解析 HTML 页面。它提供了多个构造函数,以适应不同的初始化方式: 1. `public Parser ()`: 创建一个...

    htmlparser的jar包

    在实际开发中,使用HTMLParser时,你可能需要处理一些常见的问题,比如CSS选择器的支持、JavaScript的解析、URL的处理等。虽然HTMLParser本身并不直接提供这些功能,但可以通过扩展其API或者与其他库(如Jsoup)结合...

    htmlparser.jar文件

    在实际使用HTMLParser时,首先需要在项目中引入这些jar包,然后可以通过创建Parser对象来解析HTML字符串或者文件。例如: ```java import org.htmlparser.Parser; import org.htmlparser.util.ParserException; ...

    HtmlParser

    使用HTMLParser,我们可以解析网页内容,提取所需信息,如文章标题、链接、图片等。以下是一些核心概念和步骤: 1. **创建自定义解析器**: 首先,我们需要继承Python的`HTMLParser`类,并重写其方法,如`handle_...

Global site tag (gtag.js) - Google Analytics