Как получить «Текст» HTML-страницы?(Веб-браузер - Delphi) - PullRequest
3 голосов
/ 08 сентября 2010

Я использую WebBrowser, чтобы получить источник HTML-страниц.У нашего источника есть текст и несколько HTML-тегов.как это:

FONT></P><P align=center><FONT color=#ccffcc size=3>**Hello There , This is a text in our html page** </FONT></P><P align=center> </P>

HTML-теги являются случайными, и мы не можем их угадать.Так есть ли способ получить только текст и отделить его от тегов HTML?

Ответы [ 5 ]

7 голосов
/ 08 сентября 2010

Вы можете использовать экземпляр TWebBrowser для анализа и выбора текста в HTML-коде.

см. Этот образец

uses
MSHTML,
SHDocVw,
ActiveX;

function GetPlainText(Const Html: string): string;
var
DummyWebBrowser: TWebBrowser;
Document       : IHtmlDocument2;
DummyVar       : Variant;
begin
   Result := '';
   DummyWebBrowser := TWebBrowser.Create(nil);
   try
     //open an blank page to create a IHtmlDocument2 instance
     DummyWebBrowser.Navigate('about:blank');
     Document := DummyWebBrowser.Document as IHtmlDocument2; 
     if (Assigned(Document)) then //Check the Document
     begin
       DummyVar      := VarArrayCreate([0, 0], varVariant); //Create a variant array to write the html code to the  IHtmlDocument2
       DummyVar[0]   := Html; //assign the html code to the variant array
       Document.Write(PSafeArray(TVarData(DummyVar).VArray)); //set the html in the document
       Document.Close;
       Result :=(Document.body as IHTMLBodyElement).createTextRange.text;//get the plain text
     end;
   finally
     DummyWebBrowser.Free;
   end;
end;
2 голосов
/ 08 сентября 2010

Вы должны взглянуть на использование Delphi DOM HTML-парсера

1 голос
/ 08 сентября 2010

По сути: вообще нельзя.

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

Для определенных и четко определенных подмножеств HTML, у вас больше шансов:

Сначала вам нужно получить HTML в строку, а затем проанализируйте этот HTML.

Получить HTML можно, например, с помощью Indy (см. Ответы на на этот вопрос ).

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

Вы можете использовать TWebBrowser, как предлагает RRuz, но это зависит от Internet Explorer.
Современные системы Windows не гарантируют, что Internet Explorer уже установлен ...

- Йерун

1 голос
/ 08 сентября 2010

Если ваша звездочка постоянна, вы можете просто получить каждый символ между **.Если ваша звездочка не постоянна, вы можете переписать эту строку и стереть все теги (вещи, которые начинаются с < и заканчиваются >. Или вы можете использовать для него некоторую библиотеку DOM-анализатора .

0 голосов
/ 16 апреля 2015

Использование Delphi HTML Component Library позволяет получить текст только из HTML-документа.Свойство THtDocument.InnerText возвращает форматированный текст без тегов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...