<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 閱讀(755) 評論(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无码专区一区| 亚洲VA中文字幕无码一二三区| 69视频在线观看高清免费| 亚洲精品GV天堂无码男同| 免费国产作爱视频网站| 国产成人+综合亚洲+天堂| 亚洲AV日韩精品久久久久久久 | 成人黄网站片免费视频 | 中文字幕免费在线播放| 亚洲精品在线免费观看| vvvv99日韩精品亚洲| 99精品视频在线观看免费播放 | 久久精品国产亚洲AV无码麻豆 | 天天摸夜夜摸成人免费视频| 亚洲精品黄色视频在线观看免费资源 | 亚洲av无码久久忘忧草| 精品亚洲成α人无码成α在线观看 | 污污视频免费观看网站| 亚洲伊人久久大香线蕉苏妲己| 久久久www成人免费毛片 | 久久久久女教师免费一区| 精品亚洲AV无码一区二区三区| 亚洲午夜爱爱香蕉片| 免费国产黄线在线观看| 成人无码区免费A片视频WWW| 久久青青成人亚洲精品| 国产一级高清视频免费看| 1区2区3区产品乱码免费| 成年网在线观看免费观看网址| 亚洲国产精品久久网午夜| 四虎国产精品免费久久| 国产精品美女久久久免费| 亚洲av永久无码天堂网| 亚洲专区先锋影音| 亚洲人成网站观看在线播放| 成人免费乱码大片A毛片| 亚洲精品天堂成人片AV在线播放 | 4444亚洲国产成人精品| 搡女人真爽免费视频大全|