小弟最近在写一个网络通信程序,需要获取网页中的一个字符串,而这个字符串还不是固定的,小弟很是迷茫!应该如何实现?希望高手指点!
比如说我想要获取csdn上帖子发表的时间 应该怎么办呢?

解决方案 »

  1.   

    S:=IDHTTP.GET(URL);
    I:=POS('CHAR',S);
      

  2.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      L:TStringList;
      i:integer;
    begin
      try
        L:=TStringList.Create;
        L.Add(IdHTTP1.Get('http://community.csdn.net/Expert/topic/4536/4536074.xml?temp=.4449427'));
        for i:=0 to L.Count-1 do
         begin
           if Pos('<PostDateTime>',L[i])>0 then
           //查看网页源代码 这个例子的发贴时间位置:<PostDateTime>2006-01-27 11:10:00</PostDateTime>
           //直接用Copy就可以得到了,当然,若是取值的条件独一无二的话就更好处理了。
            mmo1.Lines.Add(Copy(L[i],Pos('<PostDateTime>',L[i])+14,Pos('</PostDateTime>',L[i])-Pos('<PostDateTime>',L[i])-14))
         end;
      finally
       L.Free;
      end;
    end;
    我写的下载电影图片的例子你可以看看
    http://www.2ccc.com/article.asp?articleid=2621
      

  3.   

    谢谢高手 领悟了:) happy new year too you!
      

  4.   

    不是验证码 是定单号 这个数据每有一个人买就会增加1 但是不是只有一个人买啊 没规律要到你提交定单的时候页面上出现这个定单号;www.sharebank.com.cn  随便找个商品提交定单的第3步就看见定单号了 你看看吧 能不能获取了
      

  5.   

    procedure TForm1.btn1Click(Sender: TObject);
    var
      L:TStringList;
      i:integer;
      str:string;
    begin
      try
        L:=TStringList.Create;
        L.Add(IdHTTP1.Get('http://www.sharebank.com.cn/soft/softbuy_fin.php?url=NDcxMDE0fDEzMDE1fDIzNTAyMXwzfHdlYWxzaEAyMWNuLmNvbXx8fA=='));
        for i:=0 to L.Count-1 do
         begin
           if Pos('订单号 <font',L[i])>0 then
           begin
             str:=Copy(L[i],Pos('bignum">',L[i])+8,Pos('</',L[i]));
             mmo1.Lines.Add(Copy(str,1,pos('</font>',str)-1));
           end;
         end;
      finally
       L.Free;
      end;
    end;
      

  6.   

    <input name='oid' type='hidden' value=471343>
    <input name='tid' type='hidden' value=61138434471000471343>要获取tid的值61138434471000471343
    <input name 只有这两处,而关键字写if Pos('<input name='tid'',L[i])>0 then这样还不行,他有"'"符号,我该怎么半呢,再次麻烦高手了.我很菜啊,只是写过一个论坛灌水机,朋友把我看的太高了(是他也不懂网络编程)  嘿嘿 ^_*
      

  7.   

    晕,解决了,原来copy不用从头开始,从哪个字符开始都行呀:(
      

  8.   

    我也想学网络编程
    拿楼主问的问题为例,我购买豪杰超级解霸,点击提交订单,应该如何实现呢?是不是只要抓包然后post就行了?可是我老是弄不成功.请高手帮忙.!以下是我点击提交订单抓到的包.
    POST /soft/softbuy_2.php HTTP/1.1
    Accept: */*
    Referer: http://vnet.sharebank.com.cn/soft/softbuy.php?soid=13317
    Accept-Language: zh-cn
    Content-Type: application/x-www-form-urlencoded
    UA-CPU: x86
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322)
    Host: vnet.sharebank.com.cn
    Content-Length: 162
    Connection: Keep-Alive
    Cache-Control: no-cache
    Cookie: last_soft=13317; o_regname=RantipoledHERO%D7%A8%D3%C3%B9%BA%C2%F2%B9%A4%BE%DF; o_useremail=RH_PublicEmail%40126.com; o_usermtel=13; __utma=55348841.1188863862.1138495194.1138512626.1138545409.4; __utmz=55348841.1138495194.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); __utmb=55348841; PHPSESSID=9242cdd8ef8172f6714ddfc542046ee5softid=13317&orsoqty=1&regname=123&[email protected]&[email protected]&userbakemail=&usermtel=13&usermsg=&term=yes&imageField.x=77&imageField.y=8
    是应该看下面这一段吧?以下是我的程序
    procedure TForm1.bsSkinButton3Click(Sender: TObject);
    const
    softid='13317';
    orsoqty='1';
    regname='123';
    useremail='[email protected]';
    tmpmail='[email protected]';
    userbakemail='';
    usermtel='13';
    usermsg='';
    term='yes';var
    params:tstrings;
    htm:string;
    begin
    params:=tstringlist.Create;
    try
    params.Add('softid='+softid);
    params.Add('orsoqty='+orsoqty);
    params.Add('regname='+regname);
    params.Add('useremail='+useremail);
    params.Add('userbakemail='+userbakemail);
    params.Add('tmpmail='+tmpmail);
    params.Add('usermtel='+usermtel);
    params.Add('usermsg='+usermsg);
    params.Add('term='+term);htm:=idhttp3.Post('http://vnet.sharebank.com.cn/soft/softbuy_2.php',params);
    if pos('http://vnet.sharebank.com.cn/soft/softbuy_2.php',htm)=0 then
    begin
    ShowMessage('失败');
    end;finally
    Params.Free;
    end;
    end;执行后提示失败,请高手帮忙改下,谢谢!