有關網頁抓取...附上程式,請前輩幫我看看如何提升效率.. |
缺席
|
ching1438
一般會員 發表:3 回覆:1 積分:0 註冊:2004-03-04 發送簡訊給我 |
以下程式,在執行時會花非常多的時間,請問前輩們對此可否有改善的空間??
平均抓一個網站要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;PageCount
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |