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?
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();
}
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.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
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
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.