delphi网页数据抓取

您所在的位置:网站首页 delphi网页数据抓取 delphi网页数据抓取

delphi网页数据抓取

2024-01-14 14:03| 来源: 网络整理| 查看: 265

delphi网页数据抓取 原创

zhongguoren666 2023-05-08 14:47:00 博主文章分类:Delphi ©著作权

文章标签 delphi buffer internet string query 文章分类 Html/CSS 前端开发

©著作权归作者所有:来自51CTO博客作者zhongguoren666的原创作品,请联系作者获取转载授权,否则将追究法律责任

简单:

IdHttp:TIdHttp; Params:TStrings; Begin Params:=TStrinList.Create; IdHttp:=TIdHttp.Create(Nil); //提交网页的参数 Params.Add('参数1=XXX'); Params.Add('参数2=YYY'); Try IdHttp.Get('你要的网址',Params); Memo1.Text:= Finlly Params.Free; IdHttp.Free; end; {你分析Memo1中的数据} {将数据保存至数据库} end; function TLisReport.DownloadFile(const remoteurl: string; Stream: TStream; DownloadTitle: string): Boolean; var NetHandle: HINTERNET; UrlHandle: HINTERNET; BytesRead: DWORD; Buffer: array[1..8192] of Char; HaveRead: DWORD; lpdwlen, lpdwidx, lpdword: DWord; begin Result := false; NetHandle := InternetOpen( 'htmlcopy for Lis', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); if Assigned(NetHandle) then begin UrlHandle := InternetOpenUrl( NetHandle, PChar(remoteurl), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(UrlHandle) then begin HaveRead := 0; lpdword := 0; lpdwlen := 4; lpdwidx := 0; HttpQueryInfo(UrlHandle, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @lpdword, lpdwlen, lpdwidx); repeat FillChar(Buffer, 8192, 0); InternetReadFile(UrlHandle, @Buffer[1], SizeOf(Buffer), BytesRead); Stream.Write(Buffer[1], bytesread); HaveRead := HaveRead + bytesread; hintProgress(DownloadTitle, round(HaveRead * 100 / lpdword)); until BytesRead = 0; result := true; hintProgress(DownloadTitle, 0); end; InternetCloseHandle(UrlHandle); end; InternetCloseHandle(NetHandle); end;

无外乎两种方法: 1用http的控件来POST或者GET,这里要注意NMHTTP在POST时有缺陷,论坛里有论述,建议用ICS或者INDY 2用IHTMLDOCUMENT2来做,这种方法就是通过IE接口在程序里面进行提交 我曾经为某个网上评选活动作弊,两种投票器都作过,很简单的  

我用的是  Delphi 7 和 Indy 的 TidHttp 控件 对于有Session的主页进行 Post时,会出现过期等字样 下面是程序,求高手指点

//---------------------------------------------------- procedure TMainForm.btnRunClick(Sender: TObject); var Source: TStrings; Response: TMemoryStream; S, Cookie: String; i: integer; begin Response := TMemoryStream.Create; Source := TStringList.Create; S := Http.Get(Page1); Memo1.Text := S; // 从返回的页面中找出cookie, 并增加到http.Request中 for i := 0 to Http.Response.RawHeaders.Count -1 do if UpperCase(LeftStr(Http.Response.RawHeaders[i], 10)) = 'SET-COOKIE' then begin Cookie := Trim(Copy(Http.Response.RawHeaders[i], 12, MaxInt)); Cookie := Copy(Cookie, 1, Pos(';', Cookie) - 1); Http.Request.RawHeaders.Add('Cookie:'+ Cookie); end; // 再去下一页, 先准备数据 Source.Clear; Source.Add('USERnumber=' + UserName + '&pwd=' + PassWord + '&UserType=0' + '&imageField2.x=19&imageField2.y=8'); Memo1.Text := Http.Post(Page2, Source); Source.Free; Response.Free; //----------------------------------------------------

收藏 评论 分享 举报

上一篇:delphi抓取网页内容的程序

下一篇:分享SQL2005分区实现教程



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3