`
gcgmh
  • 浏览: 349368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

htmlparser使用例子(全)

阅读更多
import java.net.URL;

import junit.framework.TestCase;

import org.apache.log4j.Logger;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.Tag;
import org.htmlparser.beans.LinkBean;
import org.htmlparser.filters.NodeClassFilter;
import org.htmlparser.filters.OrFilter;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.HeadTag;
import org.htmlparser.tags.ImageTag;
import org.htmlparser.tags.InputTag;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.tags.OptionTag;
import org.htmlparser.tags.SelectTag;
import org.htmlparser.tags.TableColumn;
import org.htmlparser.tags.TableRow;
import org.htmlparser.tags.TableTag;
import org.htmlparser.tags.TitleTag;
import org.htmlparser.util.NodeIterator;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.htmlparser.visitors.HtmlPage;
import org.htmlparser.visitors.NodeVisitor;
import org.htmlparser.visitors.ObjectFindingVisitor;

public class T extends TestCase {

  private static final Logger logger = Logger.getLogger(T.class);

  public T(String name) {
    super(name);
  }

  /*
   * 测试ObjectFindVisitor的用法
   */
  public void testImageVisitor() {
    try {
      ImageTag imgLink;
      ObjectFindingVisitor visitor = new ObjectFindingVisitor(ImageTag.class);
      Parser parser = new Parser();
      parser.setURL("http://www.google.com");
      parser.setEncoding(parser.getEncoding());
      parser.visitAllNodesWith(visitor);
      Node[] nodes = visitor.getTags();
      for (int i = 0; i < nodes.length; i++) {
        imgLink = (ImageTag) nodes[i];
        logger.fatal("testImageVisitor() ImageURL = " + imgLink.getImageURL());
        logger.fatal("testImageVisitor() ImageLocation = " + imgLink.extractImageLocn());
        logger.fatal("testImageVisitor() SRC = " + imgLink.getAttribute("SRC"));
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试TagNameFilter用法
   */
  public void testNodeFilter() {
    try {
      NodeFilter filter = new TagNameFilter("IMG");
      Parser parser = new Parser();
      parser.setURL("http://www.google.com");
      parser.setEncoding(parser.getEncoding());
      NodeList list = parser.extractAllNodesThatMatch(filter);
      for (int i = 0; i < list.size(); i++) {
        logger.fatal("testNodeFilter() " + list.elementAt(i).toHtml());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  /*
   * 测试NodeClassFilter用法
   */
  public void testLinkTag() {
    try {

      NodeFilter filter = new NodeClassFilter(LinkTag.class);
      Parser parser = new Parser();
      parser.setURL("http://www.google.com");
      parser.setEncoding(parser.getEncoding());
      NodeList list = parser.extractAllNodesThatMatch(filter);
      for (int i = 0; i < list.size(); i++) {
        LinkTag node = (LinkTag) list.elementAt(i);
        logger.fatal("testLinkTag() Link is :" + node.extractLink());
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  /*
   * 测试<link href=" text=’text/css’ rel=’stylesheet’ />用法
   */
  public void testLinkCSS() {
    try {

      Parser parser = new Parser();
      parser.setInputHTML("<head><title>Link Test</title>"
          + "<link href=’/test01/css.css' text='text/css' rel='stylesheet' />"
          + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>"
          + "<body>");
      parser.setEncoding(parser.getEncoding());

      for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {
        Node node = e.nextNode();
        logger.fatal("testLinkCSS()" + node.getText() + node.getClass());

      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试OrFilter的用法
   */
  public void testOrFilter() {
    NodeFilter inputFilter = new NodeClassFilter(InputTag.class);
    NodeFilter selectFilter = new NodeClassFilter(SelectTag.class);

    NodeList nodeList = null;

    try {
      Parser parser = new Parser();
      parser
          .setInputHTML("<head><title>OrFilter Test</title>"
              + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />"
              + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />"
              + "</head>"
              + "<body>"
              + "<input type='text' value='text1′ name='text1′/>"
              + "<input type='text' value='text2′ name='text2′/>"
              + "<select><option id='1′>1</option><option id='2′>2</option><option id='3′></option></select>"
              + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>");

      parser.setEncoding(parser.getEncoding());
      OrFilter lastFilter = new OrFilter();
      lastFilter.setPredicates(new NodeFilter[] { selectFilter, inputFilter });
      nodeList = parser.parse(lastFilter);
      for (int i = 0; i <= nodeList.size(); i++) {
        if (nodeList.elementAt(i) instanceof InputTag) {
          InputTag tag = (InputTag) nodeList.elementAt(i);
          logger.fatal("OrFilter tag name is :" + tag.getTagName() + " ,tag value is:"
              + tag.getAttribute("value"));
        }
        if (nodeList.elementAt(i) instanceof SelectTag) {
          SelectTag tag = (SelectTag) nodeList.elementAt(i);
          NodeList list = tag.getChildren();

          for (int j = 0; j < list.size(); j++) {
            OptionTag option = (OptionTag) list.elementAt(j);
            logger.fatal("OrFilter Option" + option.getOptionText());
          }

        }
      }

    } catch (ParserException e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试对<table><tr><td></td></tr></table>的解析
   */
  public void testTable() {
    Parser myParser;
    NodeList nodeList = null;
    myParser = Parser.createParser("<body> " + "<table id='table1′ >"
        + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>"
        + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>"
        + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >"
        + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>"
        + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>"
        + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>", "GBK");
    NodeFilter tableFilter = new NodeClassFilter(TableTag.class);
    OrFilter lastFilter = new OrFilter();
    lastFilter.setPredicates(new NodeFilter[] { tableFilter });
    try {
      nodeList = myParser.parse(lastFilter);
      for (int i = 0; i <= nodeList.size(); i++) {
        if (nodeList.elementAt(i) instanceof TableTag) {
          TableTag tag = (TableTag) nodeList.elementAt(i);
          TableRow[] rows = tag.getRows();

          for (int j = 0; j < rows.length; j++) {
            TableRow tr = (TableRow) rows[j];
            TableColumn[] td = tr.getColumns();
            for (int k = 0; k < td.length; k++) {
              logger.fatal("<td>" + td[k].toPlainTextString());
            }

          }

        }
      }

    } catch (ParserException e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试NodeVisitor的用法,遍历所有节点
   */
  public void testVisitorAll() {
    try {
      Parser parser = new Parser();
      parser.setURL("http://www.google.com");
      parser.setEncoding(parser.getEncoding());
      NodeVisitor visitor = new NodeVisitor() {
        public void visitTag(Tag tag) {
          logger.fatal("testVisitorAll()  Tag name is :" + tag.getTagName() + " \n Class is :"
              + tag.getClass());
        }

      };

      parser.visitAllNodesWith(visitor);
    } catch (ParserException e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试对指定Tag的NodeVisitor的用法
   */
  public void testTagVisitor() {
    try {

      Parser parser = new Parser("<head><title>dddd</title>"
          + "<link href='/test01/css.css' text='text/css' rel='stylesheet' />"
          + "<link href='/test02/css.css' text='text/css' rel='stylesheet' />" + "</head>"
          + "<body>" + "<a href='http://www.yeeach.com'>yeeach.com</a>" + "</body>");
      NodeVisitor visitor = new NodeVisitor() {
        public void visitTag(Tag tag) {
          if (tag instanceof HeadTag) {
            logger.fatal("visitTag() HeadTag : Tag name is :" + tag.getTagName()
                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText());
          } else if (tag instanceof TitleTag) {
            logger.fatal("visitTag() TitleTag : Tag name is :" + tag.getTagName()
                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText());

          } else if (tag instanceof LinkTag) {
            logger.fatal("visitTag() LinkTag : Tag name is :" + tag.getTagName()
                + " \n Class is :" + tag.getClass() + "\n Text is :" + tag.getText()
                + " \n getAttribute is :" + tag.getAttribute("href"));
          } else {
            logger.fatal("visitTag() : Tag name is :" + tag.getTagName() + " \n Class is :"
                + tag.getClass() + "\n Text is :" + tag.getText());
          }

        }

      };

      parser.visitAllNodesWith(visitor);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /*
   * 测试HtmlPage的用法
   */
  public void testHtmlPage() {
    String inputHTML = "<html>" + "<head>"
        + "<title>Welcome to the HTMLParser website</title>" + "</head>" + "<body>"
        + "Welcome to HTMLParser" + "<table id='table1′ >"
        + "<tr><td>1-11</td><td>1-12</td><td>1-13</td>"
        + "<tr><td>1-21</td><td>1-22</td><td>1-23</td>"
        + "<tr><td>1-31</td><td>1-32</td><td>1-33</td></table>" + "<table id='table2′ >"
        + "<tr><td>2-11</td><td>2-12</td><td>2-13</td>"
        + "<tr><td>2-21</td><td>2-22</td><td>2-23</td>"
        + "<tr><td>2-31</td><td>2-32</td><td>2-33</td></table>" + "</body>" + "</html>";
    Parser parser = new Parser();
    try {
      parser.setInputHTML(inputHTML);
      parser.setEncoding(parser.getURL());
      HtmlPage page = new HtmlPage(parser);
      parser.visitAllNodesWith(page);
      logger.fatal("testHtmlPage -title is :" + page.getTitle());
      NodeList list = page.getBody();

      for (NodeIterator iterator = list.elements(); iterator.hasMoreNodes();) {
        Node node = iterator.nextNode();
        logger.fatal("testHtmlPage -node  is :" + node.toHtml());
      }

    } catch (ParserException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  /*
   * 测试LinkBean的用法
   */
  public void testLinkBean() {
    Parser parser = new Parser();

    LinkBean linkBean = new LinkBean();
    linkBean.setURL("http://www.google.com");
    URL[] urls = linkBean.getLinks();

    for (int i = 0; i < urls.length; i++) {
      URL url = urls[i];
      logger.fatal("testLinkBean() -url  is :" + url);
    }

  }

}
分享到:
评论
1 楼 gundumw100 2010-02-22  
你的htmlparser包里有NodeList这个类?我怎么没有!
估计我用的版本不对,麻烦大哥上传下你用的那个版本吧。谢谢诶

相关推荐

    HTMLParser 使用举例

    网络爬虫HTMLParser使用举例,实际例子让你轻松掌握HTMLParser

    htmlparser(HTML页面解析)例子

    htmlparser(HTML页面解析)例子

    Htmlparser包(带有使用指南和例子)

    java中解析网页的功能非常强大,从英文网站中找到的,很难下载的到。HTmlparser包携带有程序包和例子,以及使用指南。希望大家喜欢。

    HtmlParser c#源码+demo

    HtmlParser c#源码,自己写了一个小例子~~~~~

    java使用htmlparser提取网页纯文本例子

    主要介绍了java使用htmlparser提取网页纯文本例子,需要的朋友可以参考下

    htmlparser实现从网页上抓取数据(+例子)

    是实现用htmlparser解析html,例子还有java解析xml。自己写的例子与大家分享!

    网络爬虫htmlparser

    用htmlparser写的抓取指定网站的数据,是一个小例子,自己拿去封装,直接运行FundTableBean.java就能看到抓来的信息在控制台打应了

    htmlparser1_6

    htmlparser 爬虫(带例子TestParser) 不要数据库操作可以代码注释,经过测试()绝对可以用 例子功能: 1.抓取网址下所有链接(根据一定规则过滤) 2.得到根网页下指定节点的内容(例子是得到div下的...

    htmlParser详细文档

    详细的htmlParser讲解,包括详细的例子。

    Python中使用HTMLParser解析html实例

    前几天遇到一个问题,需要把网页中的一部分内容挑出来,于是找到了urllib和HTMLParser两个库.urllib可以将网页爬下来,然后交由HTMLParser解析,初次使用这个库,在查官方文档时也遇到了一些问题,在这里写下来与大家分享....

    htmlparser实现从网页上抓取数据doc

    htmlparser实现从网页上抓取数据doc

    gulp-htmlparser:使用 gulp 将 html 解析为 js 对象

    #gulp-htmlparser 插件解析HTML用 包裹gulp-htmlparser 描述使用 gulp 将 html 解析为 js 对象节点版本&gt;= 0.9 吞咽版3.x用法安装 npm install gulp-htmlparser --save##例子 var gulp = require ( 'gulp' ) ;...

    htmlparser抓取网页内容

    自己写的一个网页抓取例子。抓取国家专利局的专利状态。

    domhandler:htmlparser2的处理程序,用于获取DOM

    可以使用或库对树进行操作,并使用渲染。 用法 const handler = new DomHandler ( [ &lt; func&gt; callback(err, dom), ] [ &lt; obj&gt; options ]); // const parser = new Parser(handler[, options]); 可用选项如下所述。...

    python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)

    一、利用HTMLParser进行网页解析 具体HTMLParser官方文档可参考http://docs.python.org/library/htmlparser.html#HTMLParser.HTMLParser 1、从一个简单的解析例子开始 例1: test1.html文件内容如下: 复制代码 ...

    爬虫例子源代码

    import org.htmlparser.util.NodeIterator; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; public class Spider implements Runnable { boolean search_key_words = false;...

    Java网络爬虫例子

    网络爬虫的简单实现,用于从指定网站上自动抓取链接。

    Java编写多个爬虫实例

    HtmlParser 网页内容提取库HtmlParser的源码项目 nekohtml-1.9.7 nekohtml的源码项目 RhinoTest 测试js解析 ExtractContext 内容抽取示例 SearchChinesePdf 包含对PDF文件的处理 parse-rtf 包含对RTF文件的处理 ...

    Python编程入门经典

    2.3.4 几个不寻常的例子 26 2.4 本章小结 26 2.5 习题 27 第3章 变量 29 3.1 引用数据——使用数据的 名称 29 3.1.1 使用名称修改数据 30 3.1.2 复制数据 31 3.1.3 禁用的名称以及一些规则 31 3.2 使用更多的内置...

Global site tag (gtag.js) - Google Analytics