web-dev-qa-db-ja.com

AndroidでHTMLを解析します

WebページからAndroidのHTMLを解析しようとしていますが、Webページの形式が正しくないため、SAXExceptionが返されます。

AndroidでHTMLを解析する方法はありますか?

79
Daniel Benedykt

この問題が発生しました。いくつか試してみましたが、 JSoup を使用することに決めました。 jarは約132kで、これは少し大きいですが、ソースをダウンロードして、使用しないメソッドをいくつか取り出すと、それほど大きくありません。
=>良い点は、不正な形式の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();
}
67
ibaralf

Html.fromHtml(source) を使用してみましたか?

このクラスは、ソースの品質に関してはかなりリベラルだと思います(内部で TagSoup を使用します。これは、現実の悪いHTMLを念頭に置いて設計されています)。ただし、すべてのHTMLタグをサポートしているわけではありませんが、理解できないタグに反応するように実装できるハンドラーが付属しています。

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

プログラミングには無限の可能性があることはわかっていますが、1つの問題に対して多くの解決策が用意されているので、上記の解決策はすべて完璧であり、私にとってはこれが私の助けになると思います。

コードはこのようになります

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

MainActivityonCreate Methodで上記の関数を呼び出す必要があります

これが皆さんにも役立つことを願っています。

Medium の元のブログも読んでください

4
Nitin Khanna

WebViewを使用できるかもしれませんが、ドキュメントでわかるように、WebViewはjavascriptやウィジェットなどのその他のものをデフォルトでサポートしていません。

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

必要に応じてJavaScriptを有効にできると思います。

1
oropher