Разбор HTML в Android - PullRequest
       33

Разбор HTML в Android

78 голосов
/ 03 февраля 2010

Я пытаюсь проанализировать HTML в Android с веб-страницы, и, поскольку веб-страница не очень хорошо сформирована, я получаю SAXException.

Есть ли способ разбора HTML в Android?

Ответы [ 5 ]

66 голосов
/ 09 февраля 2011

Я только что столкнулся с этой проблемой. Я попробовал несколько вещей, но остановился на использовании JSoup . Jar составляет около 132 КБ, что немного больше, но если вы загрузите исходный код и удалите некоторые из методов, которые вы не будете использовать, то он не такой большой.
=> Хорошо, что он будет работать с плохо сформированным HTML

Вот хороший пример с их сайта.

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();
}
53 голосов
/ 03 февраля 2010

Вы пытались использовать Html.fromHtml (источник) ?

Я думаю, что класс довольно либерален по отношению к качеству исходного кода (он использует TagSoup внутри, который был разработан с реальным, плохим HTML в виду). Хотя он не поддерживает все теги HTML, но у него есть обработчик, который можно реализовать для реагирования на теги, которые он не понимает.

21 голосов
/ 23 марта 2011
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
4 голосов
/ 06 апреля 2018

Мы все знаем, что программирование имеет бесконечные возможности. Существует множество решений для одной проблемы, поэтому я думаю, что все вышеперечисленные решения идеальны и могут быть полезны для кого-то, но для меня это спасет мой день. *

Итак Код выглядит так

  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();
  }

Вам просто нужно вызвать вышеуказанную функцию в onCreate Method вашего MainActivity

Надеюсь, это тоже полезно для вас, ребята.

Также читайте оригинальный блог на Средний

1 голос
/ 10 августа 2010

Возможно, вы можете использовать WebView, но, как вы можете видеть в документе, WebView по умолчанию не поддерживает JavaScript и другие вещи, такие как виджеты.

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

Я думаю, что вы можете включить JavaScript, если вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...