如何用delphi抓取网页(100分)

  • 主题发起人 主题发起人 wyjb
  • 开始时间 开始时间
W

wyjb

Unregistered / Unconfirmed
GUEST, unregistred user!
还可以根据设置的链接深度抓取其他网页
谢谢!
 
关注这个问题,我也在找。
 
我正在做网页抓取的程序
你说的深度是指 给一个网址例如:www.xxx.com 深度3
就是追到第三层 其他任何参数都不配置吗 ?
你只要URL 还是要信息 》?
 
我正在做网页抓取的程序
你说的深度是指 给一个网址例如:www.xxx.com 深度3
就是追到第三层 其他任何参数都不配置吗 ?
你只要URL 还是要信息 》?
------------------------------
对阿,URL和信息都要。
 
你指的信息是不是就是联结地址和连接内容<a href='xxx.xom/xxx.asp'>你好</a>
还是需要别的信息
 
我只要网页的body部分。
 
那应该问题不大
关键是要写好 URL的正则表达式就可以了
URL你可以放在数组里
 
我用IDHTTP的get方法获取,但在获取新浪时发现:
get('http://www.sina.com.cn') 可以正常获取 但
get('http://www.sina.com')就出错,
后来发现:在浏览器中打www.sina.com 时候,就自动转向到 www.sina.com.cn了
这样转个弯,get就要出错了,可是奇怪的是用D6中DEMO中的HTTPCLIENT程序就不会出错,我看了半天代码也没有发现其中奥妙!
真晕阿。
 
呵呵
这个我倒没遇到过啊
那你就加个 ‘.cn’不就行了啊
 
建議您使用Delphi自帶的Indy組件中的TIdHTTP組件來下載文件。代碼範例如下:



uses IdHTTP;



procedure TYourClass.Someprocedure(const FURL, LocalFileName: string);
var
http: TIdHTTP;
MemStream: TFileStream;
Options: TIdHTTPOptions;
begin
http := TIdHTTP.Create;//創建TIdHTTP組件。
try
MemStream := TFileStream.Create(LocalFileName, fmCreate);//創建本地文件流對象。
try
http.ConnectTimeout := 30000;//設置http連接超時時間。這裡可以按照您的需求自己設定。
http.ReadTimeout := 120000;//設置讀取http超時時間。
http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)';//仿造IE進行下載。
http.HandleRedirects := True;//允許服務器發送跳轉Response后,IdHTTP自動下載新地址。
if hoForceEncodeParams in http.HTTPOptions then//這個代碼是取消IdHTTP自己對URL的編碼功能,因爲FURL可能傳入已經編碼過的URL地址。如果您的FURL參數中,傳入的字符串未做URLEncode的話,這個If和一下的begin end之間的代碼可以註釋掉。
begin
Options := http.HTTPOptions;
Exclude(Options, hoForceEncodeParams);
http.HTTPOptions := Options;
end;
try
http.Get(FURL, MemStream);//執行下載。
except
//加入您的異常處理代碼
end;
finally
MemStream.Free;
end;
finally
http.Free;
end;
end;



上述代碼在XP Pro SP2,Delphi7,Indy10(2006年9月9日的Snapshot版本)中測試通過。
 
非常感谢各位的回答,特别是zqw0117,关于捕捉像新浪网站那样的问题已经解决了。
我用的是delphi6 ,indy应该是7.0吧,我到网上查了,和indy10不是很兼容。我想把DELPHI6中的indy卸了,再装indy10,不知道是否可以,还有,哪里有indy 10安装包下载呢?
好久没有接触delphi了
再次对各位的热心表示衷心的感谢!
 
用IE的DOM接口来读取网页内容也是个很好的选择,这个接口已经定义好了网页的各种成员,不用自己去解析了,非常好用。多深的框架都不在话下。MSDN上有非常详细的资料,主要是利用IHTMLDOCUMENT2等接口来获取网页内容。
 
后退
顶部