从HTML(Delphi)获取渲染文本

时间:2010-06-08 21:29:23

标签: html delphi html-parsing html-content-extraction

我有一些HTML,我需要从页面中提取实际的书面文字。

到目前为止,我已尝试使用网络浏览器并渲染页面,然后转到文档属性并抓取文本。这有效,但仅限于支持浏览器的地方(IE com对象)。问题是我希望这也可以在wine下运行,所以我需要一个不使用IE COM的解决方案。

必须有一种编程方式来做到这一点是合理的。

3 个答案:

答案 0 :(得分:4)

我不确定在Delphi中推荐解析HTML的方法是什么,但是如果是我的话,我会想要捆绑一份html2text(这个名称较旧的C++ program或者较新的Python program)并产生对其中一个的调用。

您可以使用py2exe将Python html2text转换为可执行文件。这两个html2text程序都是根据GPL许可的,但只要您只是将其可执行文件与您的应用程序捆绑在一起并根据GPL的限制使其源可用,那么您应该没问题。

答案 1 :(得分:1)

您可以直接使用TIdHttp及其Get方法,而不是使用TWebBrowser。 你得到了html字符串。

答案 2 :(得分:1)

这是一个很好的简单例程,copied from 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;

然后,您可以轻松地将其修改为完全符合您的要求。