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

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

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

    工作小驛

    Ninja!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks
    一、引言

    20世紀末是萬維網(wǎng)開始膨脹的時期,它的發(fā)展速度是十分驚人的。據(jù)統(tǒng)計,萬維網(wǎng)已經(jīng)連通了世界上幾乎所有的國家,并且萬維網(wǎng)正在急速發(fā)展。目前,萬維網(wǎng)已經(jīng)成為世界上最大的信息源,成為全球范圍內(nèi)科研、教育、商業(yè)和社會、新聞、學校和專業(yè)機構(gòu)介紹、圖書及娛樂等信息的集大成者。近年來對萬維網(wǎng)的研究的兩大熱點是網(wǎng)絡(luò)搜索引擎的研究和網(wǎng)絡(luò)拓撲結(jié)構(gòu)的研究。對于網(wǎng)絡(luò)信息挖掘的首先要面對的問題就是如何提取出網(wǎng)站內(nèi)部的URL,只有獲得了網(wǎng)站的所有URL才可以網(wǎng)站的全部內(nèi)容?;诖吮疚慕o出了一種實用有效的提取網(wǎng)站內(nèi)部URL的方法。

    二、JAVA基礎(chǔ)

    Java語言方便靈活,是現(xiàn)在開發(fā)網(wǎng)絡(luò)程序的主要語言。本文采用了Java語言來開發(fā)。在Java的提供的java.util.*和 java.net.* 工具包中提供了大量簡單易用的API。此外,在網(wǎng)絡(luò)上還有大量的開放源碼。

    HTMLParser v 1.3是一套優(yōu)秀的開放源代碼的提供HTML文件分析的工具包。它可以提供快速的、實事的文本分析的功能。HTMLParser最大的成功之處是它設(shè)計簡單、速度快、應(yīng)用方便。可以從http://htmlparser.sourceforge.net下載此工具包和了解其用法。

    對于HTMLParser 工具包我們需要修改其中的htmlparser.java文件使其適用中文的html文件分析。htmlparser.java文件中具體實現(xiàn)細節(jié)就不再介紹。這里主要是把protected static final String DEFAULT_CHARSET = "ISO-8859-1";修改成protected static final String DEFAULT_CHARSET = "gb2312";因為采用默認的字符集"ISO-8859-1"對含有中文的html文件進行分析的時候就會出現(xiàn)亂碼。必須進行new String(str.getBytes("ISO-8859-1"),"GB2312")的轉(zhuǎn)換工作。

    對于修改好的htmlparser工具包,需要重新壓縮成.jar文件,放到j(luò)dk的工作環(huán)境中。

    三、具體設(shè)計

    首先新建一個靜態(tài)全局Vector變量L,在算法的遞歸調(diào)用中往L中不斷添加新發(fā)現(xiàn)的URL。公式(1)是一個遍歷網(wǎng)站內(nèi)部URL的數(shù)學表達式。

    S=T(ui) (1)

    s.t. ui O(ui)

    ui Ui-1 i=1,2…m

    其中T(u)是遍歷一個站點的所有URL的函數(shù),為了保證該遍歷方法收斂這里我給出了兩個限制條件,ui為一網(wǎng)站中的URL,O(ui)是判斷ui是否為該網(wǎng)站內(nèi)部的URL。

    算法是:

    1) 定義全局靜態(tài)變量public static Vector svecLink;

    2) 開始搜索網(wǎng)站W(wǎng)的主URL;

    3) 解析出第一頁面的所有URL;

    4) 剔除無效的URL和非本站點的URL同時記錄所獲的URL的個數(shù)為a;

    5) 把URL添加到svecLink中;

    6) 從svecLink中取出最后a個URL分別遞歸調(diào)用此函數(shù)

    為了能保證遍歷的收斂,程序必須對URL進行嚴格限制。下面是一些具體實現(xiàn):

    1) 定義的全局變量

    public final int DEEP=3; //遍歷的深度

    public static Vector svecLink, svecOutlink; //存放內(nèi)部URL和外部URL

    public static String hostName; //主機名稱

    public static boolean bl; //判斷標志

    private String location;

    private Parser parser; //對超文本進行分析

    2) 獲取主機名稱GetHostName()函數(shù)

    通過該函數(shù)來判斷所得URL是否是本網(wǎng)站的URL,如果不是就不需要添加svecLink中如果是并且以前沒有提取過就添加到svecLink中。


    public String GetHostName(String hostname)
    {
    URL aurl;
    String ss=" ";
    try
    {
    aurl=new URL(hostname);
    ss=aurl.getHost();
    }
    catch(MalformedURLException e)
    {
    e.printStackTrace();
    }
    return ss;
    }


    3) 遞歸遍歷方法

    由于網(wǎng)站中URL之間的連接構(gòu)成了圖,所以對圖的遍歷這里采用深度優(yōu)先的方法。


    public void extractLinks(String loc) throws ParserException {
    System.out.println("Parsing "+loc+" for links...");

    Vector vecTemp=new Vector();
    try {
    this.parser = new Parser(loc); //原理見HTMLParser
    parser.registerScanners();
    bl=true;
    }
    catch (ParserException e) {
    bl=false;
    e.printStackTrace();
    }

    String ss,str1;
    URL wwwurl;
    boolean byes;

    int a=0;
    b++;
    Node [] links = parser.extractAllNodesThatAre(LinkTag.class);
    //獲取一個頁面中//所有的URL
    for (int i = 0;i < links.length;i++) {
    if(bl)
    {
    byes=true;
    System.out.println("Total url is "+links.length+"This page has url "+i);
    LinkTag linkTag = (LinkTag)links[i];
    str1=linkTag.getLink();
    if(str1.equals("")) continue;
    if(str1.charAt(str1.length()-1)==/
    ||str1.charAt(str1.length()-1)==\)
    str1=str1.substring(0,str1.length()-1);
    if(!svecLink.contains(str1))
    {
    try
    {
    wwwurl=new URL(str1);
    wwwurl.getContent();
    }
    catch(MalformedURLException e)
    {
    byes=false;
    }
    catch(IOException e)
    {
    byes=false;
    }
    if(GetHostName(str1).equals(hostName) && byes)
    {
    a++;
    tID++;
    svecLink.add(str1);
    vecTemp.add(str1);
    System.out.println("the url is "+str1);
    }
    else
    {

    svecOutlink.add(str1);
    }
    }
    }
    }

    String strNew;
    if(a>0&&b<=DEEP)
    {

    for(int i=0;i {
    strNew=(String)vecTemp.get(i);
    System.out.println("this is "+strNew);
    extractLinks(strNew); //遞歸調(diào)用
    }
    }

    }


    四、結(jié)論

    本文介紹給出了一種提取網(wǎng)站內(nèi)部URL的實現(xiàn)方法,本文的方法對網(wǎng)絡(luò)機器人的研究和WEB文本挖掘提供了方便的工具。在程序的實現(xiàn)中還有許多實際的困難,需要在實驗中不斷完善和改進
    posted on 2007-09-20 15:54 王君 閱讀(650) 評論(0)  編輯  收藏 所屬分類: J2SE
    主站蜘蛛池模板: 日韩欧美亚洲国产精品字幕久久久| 亚洲精品无码专区久久久| 亚洲人成电影青青在线播放| 无码人妻精品中文字幕免费| 亚洲AV一宅男色影视| 日本黄色动图免费在线观看| 亚洲成AV人片在线播放无码| 毛片在线全部免费观看| 亚洲免费在线视频| 8090在线观看免费观看| 亚洲国产精品成人综合色在线婷婷| 最近2019中文字幕免费直播| 亚洲妇女熟BBW| 成人午夜大片免费7777| 色偷偷尼玛图亚洲综合| 亚洲一区精品伊人久久伊人| 日本视频免费高清一本18| 亚洲理论片在线观看| 成人毛片18岁女人毛片免费看| 亚洲av永久无码| 亚洲精品国产高清不卡在线| 西西人体免费视频| 久久精品国产亚洲AV高清热 | 亚洲人成电影亚洲人成9999网| 在线观看免费中文视频| 亚洲一卡二卡三卡| 免费永久在线观看黄网站| 91成人免费福利网站在线| 亚洲精品国产第1页| 日本一道高清不卡免费| 99视频免费在线观看| 亚洲视频欧洲视频| 国产最新凸凹视频免费| a级毛片免费在线观看| 亚洲国产精品综合福利专区| 免费va在线观看| 免费黄色福利视频| 男女男精品网站免费观看| 亚洲人成在线播放网站岛国| 韩国二级毛片免费播放| 免费精品久久天干天干|