<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: 聯系我


    主站蜘蛛池模板: 日本亚洲免费无线码| 久久青草亚洲AV无码麻豆| 精品亚洲AV无码一区二区| 无码日韩精品一区二区免费暖暖| 国产亚洲精品不卡在线| A国产一区二区免费入口| 亚洲精品无码久久久| 国产免费内射又粗又爽密桃视频| 亚洲国产aⅴ综合网| 香蕉免费一级视频在线观看| 亚洲色婷婷六月亚洲婷婷6月| 中文字幕a∨在线乱码免费看| 国产亚洲日韩一区二区三区| 日韩电影免费在线观看中文字幕| 亚洲AV区无码字幕中文色| 中文字幕在线免费| 亚洲第一男人天堂| 成人永久免费高清| 国产国产人免费人成成免视频| 亚洲色欲色欲www在线丝| 99久久免费看国产精品| 亚洲制服丝袜第一页| 国产成人免费网站在线观看 | 久久精品国产亚洲AV久 | 国产福利免费观看| 视频一区在线免费观看| 亚洲女久久久噜噜噜熟女| 最近新韩国日本免费观看| 亚洲综合一区无码精品| 最新亚洲成av人免费看| 在线精品一卡乱码免费| 免费看一级毛片在线观看精品视频| 国产亚洲日韩一区二区三区| 亚洲三级高清免费| 在线播放免费人成视频网站 | 亚洲午夜无码久久久久小说 | 亚洲高清视频一视频二视频三| 老司机69精品成免费视频| 亚洲熟妇AV一区二区三区浪潮| 亚洲人AV永久一区二区三区久久| 99精品视频免费在线观看|