一直習慣於用:Twebbrowser來下載網頁后提取指定標籤的文本或值,但前兩天有貼問及不讓顯示網頁,直接提取指定標籤值的問題,原貼地址:http://topic.csdn.net/u/20100520/00/96ede01f-ea84-44ed-aed5-38e189548114.html?38369    自己就研究下,通過IHTMLDocument2接口直接取得IHtmlElementCollection,再提取指定標籤的文本。方法後面再說      本貼主要目地是希望Delphi的高手們請各位高手來出出招,分享一些經驗和代碼,
  就以 http://www.163.com首頁例,如何不像twerbbrowser一樣show網頁,以盡可能少的內存,和盡可能少的臨時文件來取得它的源代碼。(具體指定標籤的內容以后再開貼)      最重要的要有代碼哦!讓大家都可以分析代碼所產生的直接效果,而不僅僅是幾句大概思路
先對未來關注此問題的高手們致敬!致謝!

解决方案 »

  1.   

    我都是自己写SOCKET取源代码,然后自己的字符分析函数。
      

  2.   


    能分享一些 SOCKET取源代码 的具體代碼嗎?
      

  3.   

    用IDHTTP似乎很多,只是不知對加密的HTTPS大家是如何處理的,然後在取得源碼后再與服務器的交互會不會顯示比較麻煩對?比如再提取指定標籤值啊,COOK以及表單等
      

  4.   

    引用MSXML,里面有IXMLHttpRequest
    可以使用CoXMLHTTPRequest创建,我都用这个,或者使用
    CreateOLEObject('WinHttp.WinHttpRequest.5.1');
      

  5.   

    基本常用的方法都给出了,至于代码也都挺简单的,仅凭IDE的提示都可以自己试出来。
      

  6.   

    基本常用的方法都给出了,至于代码也都挺简单的,仅凭IDE的提示都可以自己试出来。
      

  7.   

    http GetResponse后无非就是解析工作了
      

  8.   

    下麵轉自:[swlove] 的代碼uses  msxml;//从网页源文件中获得指定标签间的代码function TForm1.GetStr(StrSource, StrBegin, StrEnd: string): string;
    var
      in_star, in_end: integer;
    begin
      in_star := AnsiPos(strbegin, strsource) + length(strbegin);
      in_end := AnsiPos(strend, strsource);
      Result := copy(strsource, in_star, in_end - in_star);
    end;//信息列表点击procedure TForm1.btn1Click(Sender: TObject);
    const
      url = 'http://www.xxx.com';
    var
      req: IXMLHTTPRequest;
      StrStream: TStringStream;
      SetNoteStr: string;
    begin
         //利用 IXMLHTTPRequest 获取网页源代码,在调用函数GetStr截取需要的代码
          req := CoXMLHTTPRequest.Create;
          req.open('Get', url, False, EmptyParam, EmptyParam);
          req.send(EmptyParam);
          SetNoteStr := GetStr(req.responseText, '</script></center>', 'document.body.oncopy=function');//获取标签直接的代码
          StrStream := TStringStream.Create(SetNoteStr);
          try
            StrStream.Position := 0;
            (WebBrowser.Document as IPersistStreamInit).Load(TStreamadapter.Create(StrStream));//直接写入WebBrowser
          finally
            StrStream.Free;
    end;