0

Indy http サーバーを使用して、プロキシ フィルターの Web ページ内のキーワードを検索しようとしています。Web ブラウザーで動作するプロキシと http サーバーをセットアップしましたが、Web ページ内でキーワードを見つけるのに苦労しています。

メモリ ストリームを文字列に変換し、その中でキーワードを検索しようとしましたが、これは間違った方法である可能性があります。私はデルファイの経験が限られているので、少し行き詰まっています。

誰かが私に何か指針を与えることができれば、それは素晴らしいことです.

ありがとう。

編集:わかりましたここに関数を追加しました。ここで、「ストリーム」は http サーバーからのメモリ ストリームであり、「what」は検索しているキーワードですが、機能していないようです....

function FindInMemStream(Stream: TMemoryStream; What: String):Integer;
var
  bufBuffer, bufBuffer2: array[0..254] of Char;
  i: Integer;
begin
filter.Form2.ListBox1.Items.Add('finding');
  What := 'train';
  Result := 0;
  i := 0;
  FillChar(bufBuffer, 255, #0);          
  FillChar(bufBuffer2, 255, #0);       
  StrPCopy(@bufBuffer2, What);           
  Stream.Position:=0;
  while Stream.Position <> Stream.Size do   
  begin
    Stream.Read(bufBuffer[0],Length(What));   
    if CompareMem(@bufBuffer,@bufBuffer2,Length(What)) then       
    begin
    filter.Form2.ListBox1.Items.Add(IntToStr(Stream.Position-Length(What)));
      Result := Stream.Position-Length(What);  // not 0 : it's found keyphrase
      Exit;
    end;
    i := i + 1;
  //  filter.Form2.ListBox1.Items.Add(IntToStr(i));
    Stream.Seek(i,0)     
  end;
end;
4

1 に答える 1

2

(商用の) DIHtmlParserなど、HTML の解析に使用できるライブラリがあります。

DIHtmlParser は、HTML、XHTML、および XML の読み取り、情報の抽出、および書き込みを行います。

その機能リストから:

  • 完全な Unicode サポート (Delphi のバージョンに応じて、UnicodeString または WideString)。
  • 70 を超える文字セットをネイティブに (OS に依存せずに) 読み書きします。
  • TStream、メモリ バッファ、または文字列で動作します。
  • 一度に 1 つの HTML をアプリケーションに返します。

このようなライブラリを使用すると、HTML コンテンツ (可視テキスト) を HTML 応答から簡単に抽出でき、検索用語を見つけるための残りのタスクは簡単になります。

独自の HTML パーサーを作成しようとはせず、既存のライブラリーを使用します。

于 2013-04-16T12:06:45.160 に答える