html(delphi)からレンダリングされたテキストを取得します
-
25-09-2019 - |
質問
HTMLがいくつかあり、実際に書かれたテキストをページから抽出する必要があります。
これまでのところ、Webブラウザーを使用してページをレンダリングしてから、ドキュメントプロパティに移動してテキストをつかんでみました。これは機能しますが、ブラウザがサポートされている場合のみ(つまり、comオブジェクト)。問題は、これもワインの下で実行できるようにしたいので、IE COMを使用しないソリューションが必要です。
これを行うには、合理的なプログラム的な方法が必要です。
解決
DelphiでHTMLを解析する推奨方法が何であるかはわかりませんが、もしそれが私だったら、HTML2Textのコピーを束ねたいだけです(古いもののいずれか C ++プログラム その名前または新しいものによって Pythonプログラム)そして、それらのいずれかに電話をかけます。
python html2textを使用して実行可能ファイルに変えることができます py2exe. 。両方のHTML2TEXTプログラムはGPLの下でライセンスされていますが、実行可能ファイルをアプリにバンドルし、GPLの制限に応じてソースを利用できるようにするだけでは、大丈夫です。
他のヒント
Twebbrowserを使用する代わりに、TidhttpとそのGETメソッドを直接使用できます。
HTML文字列を取り戻します。
これが素敵なシンプルなルーチンです、 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;
その後、これを簡単に変更して、必要なことを正確に実行できます。
所属していません StackOverflow