當前位置:編程學習大全網 - 源碼下載 - 用Delphi實現網頁獲取

用Delphi實現網頁獲取

說到網頁采集,人們通常會認為是從網上竊取數據,然後將收集到的數據掛在自己的網站上。其實妳也可以把收集到的數據作為公司的參考,或者把收集到的數據和自己公司的業務進行對比。

目前網頁采集多是3P代碼(3P是ASP,PHP,JSP)。易動易科技公司BBS中最具代表性的新聞采集系統,網上流傳的新浪新聞采集系統,都是ASP程序使用,但是理論上速度不是很好。用其他軟件嘗試多線程采集是不是更快?答案是肯定的。可以用DELPHI,VC,VB,JB,但是PB好像很難做。下面用DELPHI來說明網頁數據的收集。

簡單的新聞采集

新聞采集最簡單,只要妳識別標題、副標題、作者、來源、日期、新聞主題、分頁。妳必須在采集之前獲取網頁的內容,所以在DELPHI中添加idHTTP控件(在indy Clients面板中),然後使用idHTTP1。獲取網頁內容的GET方法。聲明如下:

函數Get(AURL:string):string;超載;

AURL參數,字符串類型,指定URL地址字符串。該函數返回壹個字符串,該字符串返回網頁的HTML源文件。例如,我們可以

像這樣打電話:

tmpStr:= idHTTP1。獲取('

調用成功後,網易首頁的代碼存儲在tmpstr變量中。

接下來說說數據攔截。在這裏,我定義了這樣壹個函數:

函數TForm1。GetStr(StrSource,StrBegin,StrEnd:string):string;

定義變量

in_star,in_end:整數;

開始

in_star:=AnsiPos(strbegin,strsource)+length(str begin);

in_end:=AnsiPos(strend,strsource);

結果:=copy(strsource,in_sta,in _ end-in _ star);

結束;

StrSource:表示HTML源文件的字符串。

StrBegin:指示攔截開始標記的字符串。

StrEnd:字符串,表示攔截結束的標誌。

該函數將字符串StrSource中的壹段文本從StrSource返回到StrBegin。

例如:

strtmp:=TForm1。GetStr('A123BCD ',' A ',' BC ');

運行後,strtmp的值為' 123 '。

函數中使用的AnsiPos和copy都是由系統定義的。可以在delphi的幫助文件中找到相關說明,我在這裏簡單說壹下:

函數AnsiPos(const Substr,S: string): Integer

返回Substr在s中首次出現的位置。

函數copy(strsource,in_sta,in _ end-in _ star):string;

返回字符串strsource中從in_sta(整數數據)到in_end-in_star(整數數據)的字符串。

通過以上功能,我們可以通過設置各種標簽來截取我們想要的文章內容。在程序中,我們需要設置許多標記,這很麻煩。為了定位某個內容,我們必須設置它的開始和結束標記。比如妳想獲取網頁上的壹篇文章的標題,妳必須事先檢查網頁代碼,在文章標題前後檢查出壹些特征碼,通過這些特征碼截取文章的標題。

假設要收集的文章的地址是

代碼是:

超文本標記語言

元"

meta name = " GENERATOR " content = " Microsoft front page 5.0 "

meta name = " ProgId " content = " front page。編輯器.文檔"

meta http-equiv = " Content-Type " Content = " text/html;charset=gb2312 "

標題新網頁1/標題

/頭

身體

P align = " center文章標題/b/p

table border = " 1 " cell padding = " 0 " cellspacing = " 0 " style = " border-collapse:collapse " border color = " # 11111 " width = " 100% " id = " autonumber 1 "

Trtd width="60% "作者/td

Td width="40% "source /td/tr

/表格

Pfont size="2 "這裏是文章的正文。/font/p

A href= '..new_pr.asp '上壹個/a a href='new_ne.asp '下壹個/a

/body

/html

第壹步,我們用strsource:= idhttp 1 . get(');將網頁代碼保存在strsource變量中。

然後定義strTitle,strAuthor,strCopyFrom,strContent:

strTitle:= GetStr(StrSource,' p align="center"b ','/b/p '):

strAuthor:= GetStr(StrSource,' trtd width="60% " ','/td '):

strCopyFrom:= GetStr(StrSource,' td width="40% " ','/td/tr '):

strContent:= GetStr(StrSource,' pfont size="2 ",'/font/p '):

這樣就可以將文章的標題、副標題、作者、來源、日期、內容、分頁分別存儲在上述變量中。

第二步,循環打開下壹頁,獲取內容並添加到strContent變量中。

StrSource:= idHTTP1。get(' new _ ne . ASP ');

str content:= str content+GetStr(StrSource,' pfont size="2 ",'/font/p '):

然後判斷是否有下壹頁,如果有,則獲取下壹頁的內容。

這就完成了壹個簡單的攔截過程。從上面的程序代碼可以看出,我們使用的所有攔截方法都是為了找到被攔截內容的首尾。如果有多個頭和尾呢?好像沒有辦法,只會找到第壹個,所以妳要核實壹下這個截取內容的正反面是不是只有壹個地方,再去找。

  • 上一篇:360殺毒和ESS哪個適合我用?
  • 下一篇:牛在第二的成語有哪些成語?
  • copyright 2024編程學習大全網