Парсинг некорректного HTML в Android: обход SaxException
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Представляем краткую инструкцию по парсингу HTML на Android с применением библиотеки JSoup:
// Подключим фреймворк JSoup
implementation 'org.jsoup:jsoup:1.14.3'
// Начнем парсинг
String html = "<title>Образец</title><p>Текст</p>";
Document doc = Jsoup.parse(html);
String title = doc.select("title").first().text();
String text = doc.select("p").text();
// Результат получен!
System.out.println("Заголовок: " + title); // Вывод: Образец
System.out.println("Текст: " + text); // Вывод: Текст
Выберите элементы в HTML с помощью CSS-селекторов, и вместе с JSoup освободите главный поток интерфейса.
Работа с JSoup
JSoup является мощным средством для разбора, модификации и доступа к информации в HTML, что обеспечивает повышенную эффективность вашего кода.
Обработка некорректного HTML
Неудобна плохая структура HTML? Пусть JSoup заботится о решении этой проблемы:
Element content = doc.select("div.content").first();
// JSoup сумеет управиться с HTML, даже если структура слишком запутана и в нём много пропущенных тегов.
Уменьшение размера приложения
JSoup является компактным, несмотря на большие возможности. Используйте ProGuard или R8 для минимизации размера APK вашего приложения.
Работа с сетью и потоками
С помощью метода connect
в JSoup, вы можете напрямую приобрести и анализировать контент по URL. Организуйте обработку в отдельном потоке для беспрепятственной работы вашего приложения:
String url = "https://www.jokes.com";
Document document = Jsoup.connect(url).get();
// Зачем использовать браузер, если ваше приложение способно перемещаться по веб-страницам самостоятельно?
Отображение результатов в UI
Выведите результаты разбора HTML в пользовательский интерфейс с помощью runOnUiThread
.
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(parsedText);
}
});
// Ведь TextView тоже заслуживает красоты.
Обработка исключений и альтернативные пути навигации
Перехват SaxException
В случае, если в процессе разбора данных возникает ошибка SaxException
, JSoup позволит эффективно обработать исключение и сохранит надежность вашего приложения:
try {
Document doc = Jsoup.connect(url).get();
} catch (SaxException e) {
Log.e("HTML парсинг", "SaxException", e);
}
WebView как альтернатива
Если HTML, в котором вы работаете, имеет больше JavaScript, чем вы когда-либо видели на лекциях по информатике, на помощь придет компонент Android WebView. В сочетании с дополнительными библиотеками, WebView решит проблему обработки динамического содержимого HTML.
Визуализация
Можно уподобить парсинг HTML в Android к мастерскому вскрытию замка в поисках ценности:
Android-приложение (🏴☠️): Хорошо, давай найдем HTML-сокровища! (⚓️📃)
JSoup (🗝️): Смотри, что у меня получилось...
Действие:
Document doc = Jsoup.connect("http://example.com").get();
Elements links = doc.select("a[href]");
Результат:
HTML-содержимое (🔓💰): [Ссылка 1 (🔗), Ссылка 2 (🔗), Ссылка 3 (🔗)]
// JSoup: Передача выполнена успешно.
Парсинг HTML: Продвинутый уровень
Упрощенный парсинг с Html.fromHtml
Для коротких HTML-строк, метод Html.fromHtml()
в Android быстро превратит их в простой текст:
String plainText = Html.fromHtml(htmlString, Html.FROM_HTML_MODE_LEGACY).toString();
// В иногда ценим простоту.
Экранирование специальных символов
Не забывайте экранировать специальные символы для безопасной работы с HTML:
String safeHtml = Html.escapeHtml(unsafeHtml);
// Безопасность на первом месте!
Обновление знаний
В мире Android постоянно происходят обновления. Обязательно изучайте документацию по Android, чтобы быть в курсе последних изменений для Html.fromHtml()
.
Узнать больше: Онлайн-обучение
Повышайте свои навыки разбора HTML, просто практикующись. Блоги, учебные материалы и ночное чтение только помогут вам в этом. Продолжайте учиться!
Полезные материалы
- jsoup: Java HTML parser, designed for HTML editing, cleaning, scraping, and XSS safety — официальный сайт JSoup.
- Create dynamic lists with RecyclerView | Android Developers — узнайте, как создать динамический список с помощью компонента RecyclerView для отображения данных.
- Обсуждение JSoup на Stack Overflow — практические советы по использованию JSoup.
- XmlPullParser | Android Developers — официальная документация по XmlPullParser.
- Android – XML Parser — руководство по XML-парсерам.
- Как конвертировать Android JSONObject/JSONArray в стандартные Map/List. · GitHub — метод конвертации JSON в структуры Java.
- Учебник по JSoup на YouTube.