欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

遇到復雜而繁瑣的html頁面大家都望而卻步。因為很難獲取到相應的數(shù)據(jù)。

最古老的辦法的是嘗試用正則表達式,估計那么繁瑣的東西得不償失,浪費我們寶貴的時間。

第二個辦法用開源組織htmlparser的包,這個是一個比較老的項目,但是效果估計不是很好,好像不可以深入分析html,只能分析5級的結構;

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

復制代碼 代碼如下:

   /*
 * 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 {
            // 通過過濾器過濾出<A>標簽
            Parser parser = new Parser("http://www.dbjr.com.cn");
            NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {
                // 實現(xiàn)該方法,用以過濾標簽
                public boolean accept(Node node) {
                    if (node instanceof LinkTag)// 標記
                    {
                        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.dbjr.com.cn")) {
                        System.out.println(n.extractLink());
                    }
                } catch (Exception e) {
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

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

復制代碼 代碼如下:

/*
 * 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();
        }
    }
}

相關文章

  • springmvc的@Validated注解使用

    springmvc的@Validated注解使用

    這篇文章主要介紹了springmvc的@Validated注解使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 一文帶你徹底了解Java8中的Lambda,函數(shù)式接口和Stream

    一文帶你徹底了解Java8中的Lambda,函數(shù)式接口和Stream

    這篇文章主要為大家詳細介紹了解Java8中的Lambda,函數(shù)式接口和Stream的用法和原理,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-08-08
  • 基于SpringBoot+Avue實現(xiàn)短信通知功能

    基于SpringBoot+Avue實現(xiàn)短信通知功能

    Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數(shù)據(jù)驅(qū)動UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實現(xiàn)短信通知功能,文中有詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • java http token請求代碼實例

    java http token請求代碼實例

    這篇文章主要介紹了java http token請求,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • java實現(xiàn)二維碼掃碼授權登陸

    java實現(xiàn)二維碼掃碼授權登陸

    這篇文章主要為大家詳細介紹了java實現(xiàn)二維碼掃碼授權登陸,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • java基礎之字符串編碼知識點總結

    java基礎之字符串編碼知識點總結

    這篇文章主要介紹了java基礎之字符串編碼總結,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有很好的幫助,要的朋友可以參考下
    2021-04-04
  • ElasticSearch如何設置某個字段不分詞淺析

    ElasticSearch如何設置某個字段不分詞淺析

    最近在學習ElasticSearch官方文檔過程中發(fā)現(xiàn)的某個問題,記錄一下 希望能幫助到后面的朋友,下面這篇文章主要給大家介紹了關于ElasticSearch如何設置某個字段不分詞的相關資料,需要的朋友可以參考下
    2022-04-04
  • 使用spring的websocket創(chuàng)建通信服務的示例代碼

    使用spring的websocket創(chuàng)建通信服務的示例代碼

    這篇文章主要介紹了使用spring的websocket創(chuàng)建通信服務的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 徹底搞定堆排序:二叉堆

    徹底搞定堆排序:二叉堆

    二叉堆有兩種:最大堆和最小堆。最大堆:父結點的鍵值總是大于或等于任何一個子節(jié)點的鍵值;最小堆:父結點的鍵值總是小于或等于任何一個子節(jié)點的鍵值
    2021-07-07
  • Java?精煉解讀類和對象原理

    Java?精煉解讀類和對象原理

    面向?qū)ο竽耸荍ava語言的核心,是程序設計的思想。Java語言的面向?qū)ο蠹夹g包括了面向?qū)ο蠛兔嫦蜻^程的基本概念,面向?qū)ο蟮奶卣鳎琂ava語言的類,對象,修飾符,抽象類等一系列的知識點
    2022-03-03

最新評論