Question

J'ai quelques HTML et je dois extraire le texte écrit réelle de la page.

Jusqu'à présent, je l'ai essayé d'utiliser un navigateur Web et de rendre la page, puis aller à la propriété de document et saisir le texte. Cela fonctionne, mais seulement lorsque le navigateur est pris en charge (objet IE com). Le problème est que je veux que ce soit en mesure de fonctionner sous le vin aussi, donc je besoin d'une solution qui n'utilise pas IE COM.

Il doit y avoir un moyen programatic de le faire qui est raisonnable.

Était-ce utile?

La solution

Je ne suis pas sûr de ce que la méthode recommandée pour l'analyse syntaxique HTML dans Delphi est, mais si elle était moi, je serais tenté de regrouper juste une copie de html2text (soit l'ancien C ++ programme par ce nom ou plus récent programme Python de ) et à lancer un appel à l'un de ceux-ci.

Vous pouvez activer le html2text Python dans un fichier exécutable en utilisant py2exe . Les deux programmes sont html2text sous la licence GPL, mais aussi longtemps que vous regroupez simplement leur exécutable avec votre application et de leur donner source disponible selon les restrictions de la GPL, alors vous devez être d'accord.

Autres conseils

Au lieu d'utiliser un TWebBrowser, vous pouvez directement utiliser un TIdHttp et sa méthode Get.
Vous obtenez la chaîne html retour.

Voici une routine simple et agréable, copié de 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;

Vous pouvez ensuite modifier facilement ce faire exactement ce que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top