登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

飚影

 
 
 

日志

 
 

delphi网页数据抓取  

2008-07-09 17:53:48|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2006.10.15 20:43 | 评论:0 | 阅读:1726
简单:
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;
//----------------------------------------------------  



你可以通过这个链接引用该篇文章:http://chinamxm.bokee.com/viewdiary.13104228.html




引文来源  delphi网页数据抓取 数据挖掘 数据挖掘 chinamxm.bokee.com

----------------------------
一键转贴,快速捕捉生活精彩,赢每周好礼!查看活动首页>>

  评论这张
 
阅读(3571)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018