Я пытаюсь разобрать HTML в android с веб-страницы, и, поскольку веб-страница не сформирована правильно, я получаю SAXException
.
Есть ли способ разобрать HTML в Android?
Я пытаюсь разобрать HTML в android с веб-страницы, и, поскольку веб-страница не сформирована правильно, я получаю SAXException
.
Есть ли способ разобрать HTML в Android?
Ответы:
Я только что столкнулся с этой проблемой. Я попробовал несколько вещей, но остановился на 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();
}
Вы пробовали использовать Html.fromHtml (источник) ?
Я думаю, что этот класс довольно либерален в отношении качества исходного кода (он внутренне использует TagSoup , который был разработан с учетом реального плохого HTML). Он не поддерживает все теги HTML, но имеет обработчик, который вы можете реализовать для реагирования на теги, которые он не понимает.
String tmpHtml = "<html>a whole bunch of html stuff</html>";
String htmlTextStr = Html.fromHtml(tmpHtml).toString();
toString()
на Spanned
объекте вернулся из Html.fromHtml(str)
заставита многих HTML
тегов не работает ( в том числе <i>
<u>
<b>
). Так что, если вы устанавливаете текстовое представление, просто сделайте:myTextView.setText(Html.fromHtml(str))
Html.fromHtml()
. Проверьте это stackoverflow.com/a/3150456/1987045
Мы все знаем, что у программирования есть безграничные возможности. Существует множество решений для одной проблемы, поэтому я думаю, что все вышеперечисленные решения идеальны и могут быть полезны для кого-то, но для меня это спасло меня.
Итак, код выглядит так
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
Я надеюсь, что это также будет полезно для вас, ребята.
Также прочтите оригинальный блог на Medium
Возможно, вы можете использовать WebView, но, как вы можете видеть в документе, WebView по умолчанию не поддерживает javascript и другие вещи, такие как виджеты.
http://developer.android.com/reference/android/webkit/WebView.html
Я думаю, что вы можете включить javascript, если он вам нужен.