Получите представленный текст от HTML (Delphi)

У меня есть некоторый HTML, и я должен извлечь фактический записанный текст из страницы.

До сих пор я попытался использовать веб-браузер и представить страницу, затем идя в свойство документа и захватив текст. Это работает, но только там, где браузер поддерживается (IE com объект). Проблема, я хочу, чтобы это смогло работать под вином также, таким образом, мне нужно решение, которое не использует IE COM.

Должен быть программный способ сделать это, которое разумно.

5
задан Josh Kelley 8 June 2010 в 21:49
поделиться

3 ответа

Я не уверен, каков рекомендуемый способ синтаксического анализа HTML в Delphi, но если бы это был я, у меня было бы искушение просто связать копию html2text (либо более старый Программа C ++ с этим именем или более новая программа Python ) и вызовет одну из них.

Вы можете превратить Python html2text в исполняемый файл, используя py2exe . Обе программы html2text находятся под лицензией GPL, но до тех пор, пока вы просто связываете их исполняемый файл со своим приложением и делаете их исходный код доступным в соответствии с ограничениями GPL, все должно быть в порядке.

4
ответ дан 14 December 2019 в 13:27
поделиться

Вот хорошая простая процедура, скопированная из 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, '&quot;', '"',  [rfReplaceAll]);
  Result := StringReplace(Result, '&apos;', '''', [rfReplaceAll]);
  Result := StringReplace(Result, '&gt;',   '>',  [rfReplaceAll]);
  Result := StringReplace(Result, '&lt;',   '<',  [rfReplaceAll]);
  Result := StringReplace(Result, '&amp;',  '&',  [rfReplaceAll]);
  {here you may add another symbols from RFC if you need}
end;

Затем вы можете легко модифицировать ее, чтобы сделать именно то, что вам нужно.

1
ответ дан 14 December 2019 в 13:27
поделиться

Вместо использования TWebBrowser вы можете напрямую использовать TIdHttp и его метод Get.
Вы получаете обратно строку html.

1
ответ дан 14 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: