У меня есть некоторый HTML, и я должен извлечь фактический записанный текст из страницы.
До сих пор я попытался использовать веб-браузер и представить страницу, затем идя в свойство документа и захватив текст. Это работает, но только там, где браузер поддерживается (IE com объект). Проблема, я хочу, чтобы это смогло работать под вином также, таким образом, мне нужно решение, которое не использует IE COM.
Должен быть программный способ сделать это, которое разумно.
Я не уверен, каков рекомендуемый способ синтаксического анализа HTML в Delphi, но если бы это был я, у меня было бы искушение просто связать копию html2text (либо более старый Программа C ++ с этим именем или более новая программа Python ) и вызовет одну из них.
Вы можете превратить Python html2text в исполняемый файл, используя py2exe . Обе программы html2text находятся под лицензией GPL, но до тех пор, пока вы просто связываете их исполняемый файл со своим приложением и делаете их исходный код доступным в соответствии с ограничениями GPL, все должно быть в порядке.
Вот хорошая простая процедура, скопированная из Scalabium:
function StripHTMLTags(const strHTML: string): string;
var
P: PChar;
InTag: Boolean;
i, intResultLength: Integer;
begin
P := PChar(strHTML);
Result := '';
InTag := False;
repeat
case P^ of
'<': InTag := True;
'>': InTag := False;
#13, #10: ; {do nothing}
else
if not InTag then
begin
if (P^ in [#9, #32]) and ((P+1)^ in [#10, #13, #32, #9, '<']) then
else
Result := Result + P^;
end;
end;
Inc(P);
until (P^ = #0);
{convert system characters}
Result := StringReplace(Result, '"', '"', [rfReplaceAll]);
Result := StringReplace(Result, ''', '''', [rfReplaceAll]);
Result := StringReplace(Result, '>', '>', [rfReplaceAll]);
Result := StringReplace(Result, '<', '<', [rfReplaceAll]);
Result := StringReplace(Result, '&', '&', [rfReplaceAll]);
{here you may add another symbols from RFC if you need}
end;
Затем вы можете легко модифицировать ее, чтобы сделать именно то, что вам нужно.
Вместо использования TWebBrowser вы можете напрямую использовать TIdHttp и его метод Get.
Вы получаете обратно строку html.