84 votes

Analyser le HTML dans Android

J'essaie d'analyser le HTML dans Android à partir d'une page web, et comme la page web n'est pas bien formée, j'obtiens SAXException .

Existe-t-il un moyen d'analyser le HTML dans Android ?

0 votes

Je soupçonne que la dépendance de Rhino rendra htmlunit infernal à compiler sur Android, mais vous pouvez essayer... De même, un autre analyseur HTML non strict tel que soup pourrait fonctionner.

0 votes

Je me demande si webkit peut être utilisé ici.

72voto

ibaralf Points 2790

Je viens de rencontrer ce problème. J'ai essayé plusieurs choses, mais j'ai fini par utiliser JSoup . Le jar fait environ 132k, ce qui est un peu gros, mais si vous téléchargez la source et enlevez certaines des méthodes que vous n'utiliserez pas, alors il n'est pas si gros.
\=> Ce qui est bien, c'est qu'il gère le HTML mal formé.

Voici un bon exemple tiré de leur site.

File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

//http://jsoup.org/cookbook/input/load-document-from-url
//Document doc = Jsoup.connect("http://example.com/").get();

Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
  String linkHref = link.attr("href");
  String linkText = link.text();
}

1 votes

Vous pourriez essayer d'inclure le jar complet, et exécuter ProGuard sur votre application dans votre version de production pour enlever le code inutilisé.

3 votes

ATTENTION : JSoup est très très lent.

0 votes

@kevin une source pour cette affirmation ? Vous avez peut-être activé le débogage.

56voto

Matthias Points 17181

Avez-vous essayé d'utiliser Html.fromHtml(source) ?

Je pense que cette classe est assez libérale en ce qui concerne la qualité de la source (elle utilise TagSoup en interne, qui a été conçu en tenant compte du mauvais HTML dans la vie réelle). Il ne supporte pas toutes les balises HTML, mais il est livré avec un gestionnaire que vous pouvez implémenter pour réagir aux balises qu'il ne comprend pas.

1 votes

C'est très simple, je ne peux pas rechercher des choses exactes (comme XPATH).

0 votes

Attention s'il vous plaît. cela va "suspendre tous les fils". Je suis confronté à ce problème lorsque je reçois un json contenant du texte au format html. Il n'y avait pas de problème pour afficher le texte html à juste titre mais après avoir utilisé html.fromhtml(), je suis confronté à ce problème.

28voto

CommonsWare Points 402670

Il existe de nombreux Analyseurs HTML Java . Je ne peux pas dire s'ils fonctionnent sur Android. J'ai vu des gens faire des expériences avec TagSoup, d'après d'autres messages publiés ici dans SO.

23voto

EddieB Points 2646
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();

0 votes

Agréable et simple, sans plugins, je l'adore ! tnxs

2 votes

À titre d'information, l'appel toString() sur le Spanned retourné par Html.fromHtml(str) fera de nombreux HTML ne fonctionnent pas (y compris <i> <u> <b> ). Donc, si vous définissez une vue de texte, faites-le : myTextView.setText(Html.fromHtml(str))

0 votes

@Sakiboy Tu as raison. En plus de cela, il y a beaucoup d'autres tags qui ne fonctionnent pas avec Html.fromHtml() . Regardez ça stackoverflow.com/a/3150456/1987045

1voto

oropher Points 21

Vous pouvez peut-être utiliser WebView, mais comme vous pouvez le voir dans la documentation, WebView ne prend pas en charge le javascript et d'autres éléments comme les widgets par défaut.

http://developer.Android.com/reference/Android/webkit/WebView.html

Je pense que vous pouvez activer le javascript si vous en avez besoin.

4 votes

Oui, vous pouvez activer JS, facilement. Mais pas besoin d'utiliser webview pour le parsing html.

1 votes

Cela ne répond pas à la question

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X