web-dev-qa-db-fra.com

Analyser HTML dans Android

J'essaie d'analyser le code 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 code HTML dans Android?

79
Daniel Benedykt

Je viens de rencontrer ce problème. J'ai essayé quelques solutions, mais j'ai décidé d'utiliser JSoup . Le pot pèse environ 132 Ko, ce qui est un peu gros, mais si vous téléchargez le code source et retirez certaines des méthodes que vous n'utiliserez pas, il ne sera pas aussi volumineux.
=> L’avantage de l’utilisation du code HTML mal formé est qu'elle

Voici un bon exemple 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();
}
67
ibaralf

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, ce qui a été conçu avec du vrai HTML, un mauvais HTML en tête). Cependant, il ne supporte pas toutes les balises HTML, mais il est fourni avec un gestionnaire que vous pouvez implémenter pour réagir aux balises qu'il ne comprend pas.

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

Nous savons tous que la programmation offre des possibilités infinies. Il existe un grand nombre de solutions disponibles pour un seul problème. Je pense donc que toutes les solutions ci-dessus sont parfaites et peuvent être utiles à quelqu'un, mais pour moi, celle-ci me permet de gagner du temps.

Donc, le code va comme ceci

  private void getWebsite() {
    new Thread(new Runnable() {
      @Override
      public void run() {
        final StringBuilder builder = new StringBuilder();

        try {
          Document doc = Jsoup.connect("http://www.ssaurel.com/blog").get();
          String title = doc.title();
          Elements links = doc.select("a[href]");

          builder.append(title).append("\n");

          for (Element link : links) {
            builder.append("\n").append("Link : ").append(link.attr("href"))
            .append("\n").append("Text : ").append(link.text());
          }
        } catch (IOException e) {
          builder.append("Error : ").append(e.getMessage()).append("\n");
        }

        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            result.setText(builder.toString());
          }
        });
      }
    }).start();
  }

Vous devez juste appeler la fonction ci-dessus dans onCreate Method de votre MainActivity

J'espère que celui-ci est également utile pour vous les gars.

Lisez également le blog original sur Medium

4
Nitin Khanna

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

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

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

1
oropher