随笔-221  评论-148  文章-8  trackbacks-0
没多余的文字说明,java程序员应该都能看得懂.....
package com.elotto.omas.test;

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 ParserTestCase extends TestCase {
    
private static final Logger logger = Logger.getLogger(ParserTestCase.class);

    
public ParserTestCase(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=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
            
+ "<link href=http://www.yeeach.com/’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />"
            
+ "</head>" + "<body>");
            parser.setEncoding(parser.getEncoding());
            NodeList nodeList 
= null;
            
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);
        Parser myParser;
        NodeList nodeList 
= null;
    
        
try {
            Parser parser 
= new Parser();
            parser
            .setInputHTML(
"<head><title>OrFilter Test</title>"
            
+ "<link href=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
            
+ "<link href=http://www.yeeach.com/’/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/’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=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
                
+ "<link href=http://www.yeeach.com/’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />"
                
+ "</head>" + "<body>"
                
+ "<a href=http://www.yeeach.com/’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);
        }

    }


}



又新写了两个测试方法
            /*
            * 测试DIV用法
            
*/
            
public void testDivCSS() {
                
try {
                    Parser parser 
= new Parser();
                    parser
                    .setInputHTML(
"<html><head><title>Link Test</title>"
                    
+ "<link href=http://www.yeeach.com/’/test01/css.css’ text=’text/css’ rel=’stylesheet’ />"
                    
+ "<link href=http://www.yeeach.com/’/test02/css.css’ text=’text/css’ rel=’stylesheet’ />"
                    
+ "</head><body>" 
                    
+ "<div id=AA>dafafda</div>"
                    
+"<div id=A2>CCC</div>"
                    
+"</body></html>");
                    NodeFilter textFilter 
= new NodeClassFilter(Div.class);
                    OrFilter lastFilter 
= new OrFilter();
                    lastFilter.setPredicates(
new NodeFilter[] { textFilter });
                    NodeList nodeList  
= parser.parse(lastFilter);

                    
for (int i=0;i<nodeList.size();i++) {
                        Node node 
= nodeList.elementAt(i);
                        Div  div
=(Div)node;
                        Tag a
=null;
                        System.out.println(
"my-------->" + node.getText()+node.toHtml()+node.toPlainTextString());
                    }
                } 
catch (Exception e) {
                    e.printStackTrace();
                }
            }
            
/**
             * 获取A里面的内容
             
*/
            
public void testAincludeImg(){
                
try{
                    Parser parser
=new Parser();
                    parser.setInputHTML(
"<html><head><title>Link Test</title></head><body><a href=http://wpa.qq.com/msgrd?V=1&amp;Uin=410145132&amp;Site=华奥星空论坛&amp;Menu=yes target='_blank'>"
                            
+"<img src='http://wpa.qq.com/pa?p=1:410145132:4'  border='0' alt='QQ' />410145132</a></body></html>") ;
                    NodeFilter textFilter 
= new NodeClassFilter(LinkTag.class);
                    OrFilter lastFilter 
= new OrFilter();
                    lastFilter.setPredicates(
new NodeFilter[] { textFilter });
                    NodeList nodeList  
= parser.parse(lastFilter);
                    
for (int i=0;i<nodeList.size();i++) {
                        Node node 
= nodeList.elementAt(i);
                        LinkTag  div
=(LinkTag)node;
                        System.out.println(
"my-------->" +node.toPlainTextString());
                    }
                }
catch(Exception e){
                    e.printStackTrace();
                }
            }

GetMethod 对象超时设置


    getMethod=new GetMethod(tempUrl);
    getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,15000);
posted on 2008-06-19 11:53 有猫相伴的日子 阅读(1799) 评论(7)  编辑  收藏 所属分类: jdk

评论:
# re: Html Parse 最佳实践 2008-06-19 12:01 | forgood
不是吧,在前面简介的概述一下实现的功能,这样看代码多浪费时间呀。呵呵  回复  更多评论
  
# re: Html Parse 最佳实践 2008-06-19 14:09 | G_G
同意上楼 说的   回复  更多评论
  
# re: Html Parse 最佳实践 2008-06-19 15:53 | BeanSoft
我用 HtmlParse + JavaMail 实现了 MHT 文件的生成,有兴趣的看这个:http://www.blogjava.net/beansoft/archive/2007/06/20/125255.html BlogJava 备份文章阅读器+离线浏览备份(含源码,SWT)   回复  更多评论
  
# re: Html Parse 最佳实践 2008-06-20 00:07 | si
不错。。。  回复  更多评论
  
# re: Html Parse 最佳实践 2008-06-20 08:49 | 隔叶黄莺
Html Parse 解析时要求 html 源文件是规整有效的,如果碰到像

<select>
<option>选项一
<option>选项二</option>
</select>

<table>
<tr><td></tr></td>
</table>

解析就会出问题。  回复  更多评论
  
# re: Html Parse 最佳实践 2008-06-22 10:08 | 有猫相伴的日子
@隔叶黄莺
这样应该是能解的出来的  回复  更多评论
  
# re: Html Parse 最佳实践[未登录] 2008-07-11 09:52 | 过客
太强悍了
楼主强呢。。  回复  更多评论
  

标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-10-22 10:04 编辑过
 
 

相关链接:
网站导航: