目前網頁采集多為3P代碼為多(3P即ASP、PHP 、JSP)。用得最有代表的就動易科技公司BBS中新聞采集系統,和網上流傳的新浪新聞采集系統等都是用ASP程序來使用,但速度從理論上來說不是很好。如果嘗試用其它軟件的多線程采集是不是更快?答案是肯定的。用DELPHI、VC、VB、JB都可以,PB似乎比較不好做。以下用DELPHI來解釋采集網頁數據。
壹、 簡單的新聞采集
新聞采集是最簡單的,只要識別標題、副題、作者、出處、日期、新聞主體、分頁就可以了。在采集之前肯定要取得網頁的內容,所以在DELPHI裏加入idHTTP控件(在indy Clients面板),然後用idHTTP1.GET 方法取得網頁的內容,聲明如下:
function Get(AURL: string): string; overload;
AURL參數,是string類型,指定壹個URL地址字符串。函數返回也是string類型,返回網頁的HTML源文件。比如我們可以這樣調用:
tmpStr:= idHTTP1.Get(‘">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta /test.htm ’);將網頁代碼保存在strsource變量中。
然後定義strTitle、strAuthor、strCopyFrom、strContent:
strTitle:= GetStr(StrSource,’ <p align="center"><b>’,’ </b></p>’):
strAuthor:= GetStr(StrSource,’ <tr><td width="60%">’,’ </td>’):
strCopyFrom:= GetStr(StrSource,’ <td width="40%">’,’ </td></tr>’):
strContent:= GetStr(StrSource,’ <p><font size="2">,’ </font></p>’):
這樣,就能把文章的標題、副題、作者、出處、日期、內容和分頁分別存儲在以上變量中。
第二步,用循環的辦法,打開下壹頁,並取得內容,加到strContent變量中。
StrSource:= idHTTP1.Get(‘new_ne.asp’);
strContent:= strContent +GetStr(StrSource,’ <p><font size="2">,’ </font></p>’):
然後再判斷有沒有下壹頁,如果還有就接著取得下壹頁的內容。
這樣就完成了壹個簡單的截取過程。從以上的程序代碼可以看到,我們使用的截取辦法都是找截取內容的頭部和尾部的,如果遇到這個頭部和尾部有多個怎麽辦?似乎沒辦法,只會找到第壹個,所以在找之前應該驗證壹下是不是只有壹處有這個截取的內容的前後部。
-------------
希望可以給妳些幫助:)