2013-04-16 1 views
0

Я пытаюсь использовать http-адрес Indy для поиска ключевых слов на веб-странице для фильтра прокси. Я настроил прокси-сервер и http-сервер, который работает с веб-браузерами, но я боюсь, когда дело доходит до поиска ключевого слова на веб-странице.Использование Indy httpserver для поиска ключевых слов на веб-странице

Я пытался преобразовать поток памяти в строку и искать ключевое слово внутри него, но, возможно, это неправильный способ сделать это. У меня ограниченный опыт работы с delphi, поэтому я немного застрял.

Если бы кто-нибудь мог дать мне какие-либо указатели, это было бы здорово.

Спасибо.

EDIT: Ok Я добавил функцию здесь, где «Стрим» является потоком памяти с http-сервера, и «что» является ключевым словом, которое я ищу, оно, похоже, не работает, хотя ....

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; 
+0

Что такое * ключевое слово *, о котором вы говорите? Является ли это частью заголовка ответа или содержимого? Не могли бы вы описать это в своем вопросе? – TLama

+0

Просто определенное ключевое слово внутри html; поисковый запрос. например, «банковское дело». – user1365875

+0

Ну, тогда вы можете просто рассматривать этот контент как HTML-документ, разбору его, например, MSHTML, и проверить, является ли это ключевое слово значением определенного HTML-тега (если это так). Это все, что вы можете сделать с этим контентом (но даже это гораздо безопаснее, чем просто проверка того, является ли эта строка частью полученного вами контента). – TLama

ответ

2

Существуют библиотеки, которые могут использоваться для разбора HTML, например (коммерческий) DIHtmlParser.

DIHtmlParser считывает, извлекает информацию и записывает HTML, XHTML и XML.

Из списка особенность:

  • Полная поддержка Unicode (UnicodeString или WideString, в зависимости от Delphi версии).
  • Считывает и записывает более 70 наборов символов изначально (независимо от ОС).
  • Работает на TStreams, буферах памяти или строках.
  • Возвращает единый HTML-код в приложение за раз.

С такой библиотекой содержимое HTML (видимый текст) можно легко извлечь из ответа HTML, а оставшаяся задача найти поисковый запрос станет тривиальной.

Я бы не стал писать собственный HTML-парсер, а использовал существующую библиотеку.