最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)

 更新時(shí)間:2014年03月21日 14:58:38   作者:  
近來(lái)有些朋友在做蜘蛛算法,或者在網(wǎng)頁(yè)上面做深度的數(shù)據(jù)挖掘,下面使用示例

遇到復(fù)雜而繁瑣的html頁(yè)面大家都望而卻步。因?yàn)楹茈y獲取到相應(yīng)的數(shù)據(jù)。

最古老的辦法的是嘗試用正則表達(dá)式,估計(jì)那么繁瑣的東西得不償失,浪費(fèi)我們寶貴的時(shí)間。

第二個(gè)辦法用開(kāi)源組織htmlparser的包,這個(gè)是一個(gè)比較老的項(xiàng)目,但是效果估計(jì)不是很好,好像不可以深入分析html,只能分析5級(jí)的結(jié)構(gòu);

我這里有個(gè)htmlparser的源代碼,可以獲取所有的超鏈接的

復(fù)制代碼 代碼如下:

   /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import java.util.HashMap;
import java.util.Map;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;


public class GetLinkTest {

    public static void main(String[] args) {

        try {
            // 通過(guò)過(guò)濾器過(guò)濾出<A>標(biāo)簽
            Parser parser = new Parser("http://www.fzitv.net");
            NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {
                // 實(shí)現(xiàn)該方法,用以過(guò)濾標(biāo)簽
                public boolean accept(Node node) {
                    if (node instanceof LinkTag)// 標(biāo)記
                    {
                        return true;
                    }
                    return false;
                }
            });
            // 打印
            for (int i = 0; i < nodeList.size(); i++) {
                LinkTag n = (LinkTag) nodeList.elementAt(i);
                //System.out.print(n.getStringText() + " ==>> ");
                //System.out.println(n.extractLink());
                try {
                    if (n.extractLink().equals("http://www.fzitv.net")) {
                        System.out.println(n.extractLink());
                    }
                } catch (Exception e) {
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

第三個(gè)辦法,也是我現(xiàn)在一直在用的辦法,首先把html清理為xml,然后用java解析xml獲取數(shù)據(jù),現(xiàn)在上傳一個(gè)java clean html的源代碼:

復(fù)制代碼 代碼如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package exec;

import java.io.File;
import java.io.IOException;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.PrettyXmlSerializer;
import org.htmlcleaner.TagNode;

/**
 *
 */
public class HtmlClean {

    public void cleanHtml(String htmlurl, String xmlurl) {
        try {
            long start = System.currentTimeMillis();

            HtmlCleaner cleaner = new HtmlCleaner();
            CleanerProperties props = cleaner.getProperties();
            props.setUseCdataForScriptAndStyle(true);
            props.setRecognizeUnicodeChars(true);
            props.setUseEmptyElementTags(true);
            props.setAdvancedXmlEscape(true);
            props.setTranslateSpecialEntities(true);
            props.setBooleanAttributeValues("empty");

            TagNode node = cleaner.clean(new File(htmlurl));

            System.out.println("vreme:" + (System.currentTimeMillis() - start));

            new PrettyXmlSerializer(props).writeXmlToFile(node, xmlurl);

            System.out.println("vreme:" + (System.currentTimeMillis() - start));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

相關(guān)文章

最新評(píng)論

龙南县| 沂南县| 建平县| 姜堰市| 肥城市| 塘沽区| 鄂伦春自治旗| 晋江市| 江北区| 龙岩市| 惠州市| 兴宁市| 康马县| 包头市| 盱眙县| 奎屯市| 敦煌市| 响水县| 酒泉市| 保德县| 高密市| 乐安县| 米易县| 万州区| 临猗县| 徐水县| 怀宁县| 洪雅县| 子长县| 宿松县| 西和县| 泰兴市| 常熟市| 米林县| 扎鲁特旗| 上虞市| 桐乡市| 亚东县| 十堰市| 清苑县| 顺平县|