<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE社區

    茍有恒,何必三更起五更眠;
    最無益,只怕一日曝十日寒.
    posts - 241, comments - 318, trackbacks - 0, articles - 16

    HTML Parser

    Posted on 2010-06-08 00:22 xcp 閱讀(754) 評論(0)  編輯  收藏 所屬分類: JAVA

    實例:http://bbs.sinobuy.cn/index.php/topic,29082.msg48061.html?PHPSESSID=25765715740d5ea729db953abfa52679

    研究的重點還是extraction的使用,有空再研究transformation的使用。
    1、htmlparser對html頁面處理的數據結構


    如圖所示,HtmlParser采用了經典的Composite模式,通過RemarkNode、TextNode、TagNode、AbstractNode和Tag來描述HTML頁面各元素。

        * org.htmlparser.Node:

    Node接口定義了進行樹形結構節點操作的各種典型操作方法,包括:

    節點到html文本、text文本的方法:toPlainTextString、toHtml

    典型樹形結構遍歷的方法:getParent、getChildren、getFirstChild、getLastChild、getPreviousSibling、getNextSibling、getText

    獲取節點對應的樹形結構結構的頂級節點Page對象方法:getPage

    獲取節點起始位置的方法:getStartPosition、getEndPosition

    Visitor方法遍歷節點時候方法:accept (NodeVisitor visitor)

    Filter方法:collectInto (NodeList list, NodeFilter filter)

    Object方法:toString、clone

        * org.htmlparser.nodes.AbstractNode:

    AbstractNode是形成HTML樹形結構抽象基類,實現了Node接口。

    在htmlparser中,Node分成三類:

    RemarkNode:代表Html中的注釋

    TagNode:標簽節點。

    TextNode:文本節點

    這三類節點都繼承AbstractNode。

        * org.htmlparser.nodes.TagNode:

    TagNode包含了對HTML處理的核心的各個類,是所有TAG的基類,其中有分為包含其他TAG的復合節點ComositeTag和不包含其他TAG的葉子節點Tag。

    復合節點CompositeTag:

    AppletTag,BodyTag,Bullet,BulletList,DefinitionList,DefinitionListBullet,Div,FormTag,FrameSetTag,HeadingTag,

    HeadTag,Html,LabelTag,LinkTag,ObjectTag,ParagraphTag,ScriptTag,SelectTag,Span,StyleTag,TableColumn,

    TableHeader,TableRow,TableTag,TextareaTag,TitleTag

    葉子節點TAG:

    BaseHrefTag,DoctypeTag,FrameTag,ImageTag,InputTag,JspTag,MetaTag,ProcessingInstructionTag,
    2、htmlparser對html頁面處理的算法

    主要是如下幾種方式

        * 采用Visitor方式訪問Html

        public static 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.info("testVisitorAll() Tag name is :" + tag.getTagName() + " Class is :" + tag.getClass());
                    }

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

        * 采用Filter方式訪問html

        public static 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();
            }
        }

        * 采用org.htmlparser.beans方式

        public static 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);
            }
        }

        * parse (NodeFilter filter):通過NodeFilter方式獲取
        * visitAllNodesWith (NodeVisitor visitor):通過Nodevisitor方式
        * extractAllNodesThatMatch (NodeFilter filter):通過NodeFilter方式

    org.htmlparser
    定義了htmlparser的一些基礎類。其中最為重要的是Parser類。
        Parser是htmlparser的最核心的類,其構造函數提供了如下:Parser.createParser (String html, String charset)、 Parser ()、Parser (Lexer lexer, ParserFeedback fb)、Parser (URLConnection connection, ParserFeedback fb)、Parser (String resource, ParserFeedback feedback)、 Parser (String resource)

    org.htmlparser.beans
    對Visitor和Filter的方法進行了封裝,定義了針對一些常用html元素操作的bean,簡化對常用元素的提取操作。
        包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。

    3.3、org.htmlparser.nodes
        定義了基礎的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。

    3.4、org.htmlparser.tags
        定義了htmlparser的各種tag。

    3.5、org.htmlparser.filters
        定義了htmlparser所提供的各種filter,主要通過extractAllNodesThatMatch (NodeFilter filter)來對html頁面指定類型的元素進行過濾,包括:AndFilter、CssSelectorNodeFilter、 HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、 IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、 NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter

    3.6、org.htmlparser.visitors
       定義了htmlparser所提供的各種visitor,主要通過visitAllNodesWith (NodeVisitor visitor)來對html頁面元素進行遍歷,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、 ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、 TextExtractingVisitor、UrlModifyingVisitor

     

    3.7、org.htmlparser.parserapplications
       定義了一些實用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,這幾個類也可以作為htmlparser使用樣例。

    3.8、org.htmlparser.tests
       對各種功能的單元測試用例,也可以作為htmlparser使用的樣例。

    文章出處:飛諾網(www.firnow.com):http://dev.firnow.com/course/3_program/java/javajs/20091021/179713.html




    名稱: ?4C.ESL | .↗Evon
    口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
    mail: 聯系我


    主站蜘蛛池模板: 国产三级电影免费观看| 亚洲a∨国产av综合av下载| 久久精品国产亚洲Aⅴ蜜臀色欲 | 亚洲国产精品成人久久蜜臀| 四虎最新永久免费视频| 最近免费mv在线观看动漫| 美女被免费网站视频在线| 亚洲乱色熟女一区二区三区蜜臀| 亚洲美女视频一区| 亚洲Av无码专区国产乱码DVD| 亚洲精品成a人在线观看| 麻豆国产人免费人成免费视频| 亚洲免费在线观看视频| 四虎影视成人永久免费观看视频 | 99久9在线|免费| 成在人线av无码免费高潮喷水| 日韩在线观看免费| 黄页网站在线免费观看| 亚洲日韩在线中文字幕综合 | 最近中文字幕mv免费高清电影 | 亚洲精品夜夜夜妓女网| 久久影院亚洲一区| 亚洲无码高清在线观看| 亚洲中文字幕无码爆乳av中文| 亚洲JIZZJIZZ中国少妇中文| 免费A级毛片在线播放不收费| 日韩免费观看一级毛片看看| 白白国产永久免费视频| 日韩精品视频免费观看| 在线观看永久免费视频网站| 在线视频免费国产成人| 亚洲国产av无码精品| 亚洲毛片网址在线观看中文字幕| 亚洲精品国产综合久久一线| 亚洲裸男gv网站| 亚洲中文久久精品无码| 久久精品亚洲综合专区| 麻豆亚洲av熟女国产一区二| 亚洲免费闲人蜜桃| 伊人久久五月丁香综合中文亚洲 | 免费中文字幕在线|