HTML 解析 -- htmlparser 基本使用

来源:互联网 发布:电影推荐知乎2017 编辑:程序博客网 时间:2024/05/21 18:44

1.htmlparser 使用

htmlparser是一个纯的java写的html解析的库,htmlparser不依赖于其它的java库,htmlparser主要用于改造 或提取htmlhtmlparser能超高速解析html,而且不会出错。毫不夸张地说,htmlparser就是目前最好的html 析和分析的工具。无论你是想抓取网页数据还是改造html的内容,用了htmlparser绝对会忍不住称赞。由于htmlparser 结构设计精良,所以扩展htmlparser 非常便利。


package com.sjcj.main;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;

public class TestHtmlParser {

    /**
     * 按行读取字符
     */
    public static void StringHerf() {
        String str = "";
        StringBuffer sb = new StringBuffer();
        BufferedReader is = null;
        try {
            is = new BufferedReader(new FileReader(""));
            while ((str = is.readLine()) != null) {
                sb.append(str);
                sb.append("/n");
            }
            try {
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    /**
     * htmlparser取得一段html代码里面所有的链接地址和链接名称
     *
     * @param html
     */
    public static void getHERF(String html) {

        // 创建Parser对象根据传给字符串和指定的编码
        Parser parser = Parser.createParser(html, "GBK");
        // 创建HtmlPage对象HtmlPage(Parser parser)
        HtmlPage page = new HtmlPage(parser);
        try {
            // HtmlPage extends visitor,Apply the given visitor to the current
            // page.
            parser.visitAllNodesWith(page);
        } catch (ParserException e1) {
            e1 = null;
        }
        // 所有的节点
        NodeList nodelist = page.getBody();
        // 建立一个节点filter用于过滤节点
        NodeFilter filter = new TagNameFilter("A");
        // 得到所有过滤后,想要的节点
        nodelist = nodelist.extractAllNodesThatMatch(filter, true);
        for (int i = 0; i < nodelist.size(); i++) {
            LinkTag link = (LinkTag) nodelist.elementAt(i);
            // 链接地址
            System.out.println(link.getAttribute("href") + "/n");
            // 链接名称
            System.out.println(link.getStringText());
        }
    }

    /**
     * 获取网页标题
     *
     * @param content
     * @throws Exception
     */
    public static void getTitle(String content) throws Exception {
        Parser myParser;
        myParser = Parser.createParser(content, "GBK");

        HtmlPage visitor = new HtmlPage(myParser);

        myParser.visitAllNodesWith(visitor);

        String textInPage = visitor.getTitle();

        System.out.println(textInPage);
    }

    public static void main(String[] args) {
        StringHerf();
    }

}

原创粉丝点击