線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:949
推到 Plurk!
推到 Facebook!

有關網頁抓取...附上程式,請前輩幫我看看如何提升效率..

缺席
ching1438
一般會員


發表:3
回覆:1
積分:0
註冊:2004-03-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-12 13:57:15 IP:218.163.xxx.xxx 未訂閱
以下程式,在執行時會花非常多的時間,請問前輩們對此可否有改善的空間?? 平均抓一個網站要10秒..    我想是在try的部份..(程式中要執行很多次..)例如 .. try {    NMHTTP1->Body="temp.txt";    NMHTTP1->Get(analyze_name) ;   //取得欲分析網頁的內容 } catch (...) {    ShowMessage("取得欲分析網頁不存在.."); }    而本程式主要是要依使用者所輸入的url抓出所有同網站內的網頁超連結.. 存入資料庫Qry_UrlTable資料表中... (因為程式碼太多了..所以只貼出網路蜘蛛的部份..)    (程式碼) NMHTTP1->InputFileMode=true; try {    NMHTTP1->Body="temp.txt";    NMHTTP1->Get(analyze_name) ;   //使用者輸入,取得欲分析網頁的內容 } catch (...) {    ShowMessage("取得欲分析網頁不存在..");    Close(); } //填參數到 Url_Table (第一筆) Qry_UrlTable->Close(); Qry_UrlTable->SQL->Clear(); Qry_UrlTable->SQL->Add("select * from url_table where type= '"+ type +"'");   //正常是空的 Qry_UrlTable->Open();    Qry_UrlTable->Append(); Qry_UrlTable->FieldValues["user_no"]    =  user_no ; Qry_UrlTable->FieldValues["url"]        =  analyze_name ; Qry_UrlTable->FieldValues["type"]       =  type ;//P:網頁分析  S:網站分析 Qry_UrlTable->FieldValues["class_no"]   = 1 ; Qry_UrlTable->FieldValues["page_no"]    = 1 ; Qry_UrlTable->Post(); UrlTable_Point=1;      //指標 UrlTable_Count=1;      //個數    //------------------------------------ TFileBaseNum = FindTFileBaseNO();        //取得文字File流水號 PFileBaseNum = FindPFileBaseNO();        //取得圖片File流水號    int SourceUrlLevelCount;      //網域層級 int Page_No=0;                //網頁流水號 int c_no =1;                  //網頁層級流水號(第1層的第2個網頁 C_no=1 Page_no=2)    //網站分析 if ( type.Pos("S")> 0  || type.Pos("s")> 0 ) {     //蜘蛛功能     while (!Qry_UrlTable->Eof)     {        //重新SourceURL 參數         user_no         = Qry_ParameterFile->FieldValues["user_no"];      //延用舊參數即可         analyze_path    = "TFile"         type            = Qry_ParameterFile->FieldValues["type"];         //延用舊參數即可         analyze_name    = Qry_UrlTable->FieldValues["url"];         c_no            = Qry_UrlTable->FieldValues["class_no"];         save_path       = "TFile";         //----------------------------------            //重新取得SourceURL 的內容         if (!StationPage)         {            try            {                NMHTTP1->Body="temp.txt";                NMHTTP1->Get(analyze_name) ;   //取得欲分析網頁的內容                c_no++;            }            catch (...)            {                ShowMessage("取得欲分析網頁不存在..");                PageNoFind=true;            }             }          //------------------------------------------------------------------------          if (! PageNoFind)          {             SourceUrlLevelCount = LevelURL (analyze_name,SourceUrlLevel);    //分解analyze_name             /*例如 www.yahoo.com.tw/aaa/bbb/ccc/ddd.asp             SourceUrlLevel[0]=www.yahoo.com.tw/             SourceUrlLevel[1]=aaa/             SourceUrlLevel[2]=bbb/             SourceUrlLevel[3]=ccc/             SourceUrlLevelCount=4;             */             GetPageCount = ParserUrl("temp.txt",PageBuff);        //取出temp.txt中的所有網頁超連結             /*             String PageBuff[1000];             */             Page_No=0;                for( int PageCount=0;PageCount0 || PageBuff[PageCount].Pos("http://") >0 || PageBuff[PageCount].Pos("HTTP://")) ) { if ( PageBuff[PageCount].Pos("../") >0 && SourceUrlLevelCount >0 ) { AnsiString TempString="" ; for (int L1=0;L1 < (SourceUrlLevelCount-1) ;L1 ) { TempString = SourceUrlLevel[L1]; } PageBuff[PageCount] = TempString PageBuff[PageCount].SubString(4, PageBuff[PageCount].Length()-4); } else if ( memcmp("/",PageBuff[PageCount].c_str(),1)==0) { if ( SourceUrlLevelCount == 0 ) PageBuff[PageCount] = Qry_UrlTable->FieldValues["url"] PageBuff[PageCount]; else { AnsiString TempString="" ; for (int L1=0;L1 < (SourceUrlLevelCount) ;L1 ) { TempString = SourceUrlLevel[L1]; } PageBuff[PageCount] = TempString PageBuff[PageCount].SubString(2,PageBuff[PageCount].Length()-1); } } else if ( memcmp("/",PageBuff[PageCount].c_str(),1)!=0 ) { if ( SourceUrlLevelCount == 0 ) { AnsiString TempString = ""; TempString =String(Qry_UrlTable->FieldValues["url"]) "/"; PageBuff[PageCount] = TempString PageBuff[PageCount]; } else { AnsiString TempString="" ; for (int L1=0;L1 < (SourceUrlLevelCount) ;L1 ) { TempString = SourceUrlLevel[L1]; } PageBuff[PageCount] = TempString PageBuff[PageCount].SubString(1,PageBuff[PageCount].Length()); } } } //分解GetURL int TempUrlLevelCount=0; TempUrlLevelCount = LevelURL ( PageBuff[PageCount],TempUrlLevel); //分解 //判斷level0是否相等 (相同網域) if ( (SourceUrlLevelCount ==0 && ! memcmp(analyze_name.c_str(),PageBuff[PageCount].c_str(),analyze_name.Length() )) || (SourceUrlLevelCount !=0 && TempUrlLevel[0] == SourceUrlLevel[0]) ) { //判斷url是否存在 try { NMHTTP1->Body="temp.txt"; NMHTTP1->Get(PageBuff[PageCount]) ; //取得欲分析網頁的內容 //-------------------------------------------------- //去除重複 Qry_UrlTable->Close(); Qry_UrlTable->Open(); while( !Qry_UrlTable->Eof) { if( Qry_UrlTable->FieldValues["url"]==PageBuff[PageCount] ) { ReUrl=true; break; } Qry_UrlTable->Next(); } if (!ReUrl ) { //-------------------------------------------------- //填入Url_Table //int c_no= Qry_UrlTable->FieldValues["class_no"]; Qry_UrlTable->Append(); Qry_UrlTable->FieldValues["user_no"] = user_no ; Qry_UrlTable->FieldValues["url"] = PageBuff[PageCount] ; Qry_UrlTable->FieldValues["type"] = type ; Qry_UrlTable->FieldValues["class_no"] = (c_no 1) ; Qry_UrlTable->FieldValues["page_no"] = ( Page_No) ; Qry_UrlTable->Post(); UrlTable_Count ; } ReUrl=false; } catch (...) { ShowMessage("非本網站網頁..."); break; } } } } //-------------------------------------------------- Qry_UrlTable->Close(); Qry_UrlTable->Open(); Qry_UrlTable->MoveBy( UrlTable_Point); StationPage=false; PageNoFind =false; }//while 蜘蛛功能(End) }//網站分析 URL 取出 (End)
系統時間:2024-05-13 16:20:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!