Ich versuche, HTML in Android von einer Webseite zu analysieren, und da die Webseite nicht gut geformt ist, bekomme ich SAXException
.
Gibt es eine Möglichkeit, HTML in Android zu analysieren?
Ich versuche, HTML in Android von einer Webseite zu analysieren, und da die Webseite nicht gut geformt ist, bekomme ich SAXException
.
Gibt es eine Möglichkeit, HTML in Android zu analysieren?
Antworten:
Ich bin gerade auf dieses Problem gestoßen. Ich habe ein paar Dinge ausprobiert, mich aber für JSoup entschieden . Das Glas ist ungefähr 132k groß, was ein bisschen groß ist, aber wenn Sie die Quelle herunterladen und einige der Methoden herausnehmen, die Sie nicht verwenden werden, ist es nicht so groß.
=> Das Gute daran ist, dass es schlecht geformtes HTML verarbeitet
Hier ist ein gutes Beispiel von ihrer Website.
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();
}
Haben Sie versucht, Html.fromHtml (Quelle) zu verwenden ?
Ich denke, dass die Klasse in Bezug auf die Quellqualität ziemlich liberal ist (sie verwendet intern TagSoup , das mit Blick auf reales, schlechtes HTML entwickelt wurde). Es werden zwar nicht alle HTML-Tags unterstützt, es wird jedoch ein Handler mitgeliefert, mit dem Sie auf nicht verständliche Tags reagieren können.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
das Spanned
Objekt aufrufen, von dem zurückgegeben Html.fromHtml(str)
wird, HTML
funktionieren viele der Tags nicht (einschließlich <i>
<u>
<b>
). Wenn Sie also eine Textansicht einstellen, gehen Sie wie folgt vor:myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
. Überprüfen Sie dies aus stackoverflow.com/a/3150456/1987045
Wir alle wissen, dass das Programmieren endlose Möglichkeiten bietet. Es gibt eine Reihe von Lösungen für ein einzelnes Problem, daher denke ich, dass alle oben genannten Lösungen perfekt sind und für jemanden hilfreich sein können, aber für mich ist dies eine Rettung für meinen Tag.
So - Code geht so
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();
}
Sie müssen nur die obige Funktion in onCreate Method
Ihrem aufrufenMainActivity
Ich hoffe, dieser ist auch für euch hilfreich.
Lesen Sie auch den Original-Blog unter Medium
Vielleicht können Sie WebView verwenden, aber wie Sie im Dokument sehen können, unterstützt WebView standardmäßig kein Javascript und andere Dinge wie Widgets.
http://developer.android.com/reference/android/webkit/WebView.html
Ich denke, dass Sie Javascript aktivieren können, wenn Sie es brauchen.