Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Парсинг некорректного HTML в Android: обход SaxException

Быстрый ответ

Представляем краткую инструкцию по парсингу HTML на Android с применением библиотеки JSoup:

Java
Скопировать код
// Подключим фреймворк 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 освободите главный поток интерфейса.

Кинга Идем в IT: пошаговый план для смены профессии

Работа с JSoup

JSoup является мощным средством для разбора, модификации и доступа к информации в HTML, что обеспечивает повышенную эффективность вашего кода.

Обработка некорректного HTML

Неудобна плохая структура HTML? Пусть JSoup заботится о решении этой проблемы:

Java
Скопировать код
Element content = doc.select("div.content").first();
// JSoup сумеет управиться с HTML, даже если структура слишком запутана и в нём много пропущенных тегов.
Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Уменьшение размера приложения

JSoup является компактным, несмотря на большие возможности. Используйте ProGuard или R8 для минимизации размера APK вашего приложения.

Работа с сетью и потоками

С помощью метода connect в JSoup, вы можете напрямую приобрести и анализировать контент по URL. Организуйте обработку в отдельном потоке для беспрепятственной работы вашего приложения:

Java
Скопировать код
String url = "https://www.jokes.com";
Document document = Jsoup.connect(url).get();
// Зачем использовать браузер, если ваше приложение способно перемещаться по веб-страницам самостоятельно?

Отображение результатов в UI

Выведите результаты разбора HTML в пользовательский интерфейс с помощью runOnUiThread.

Java
Скопировать код
runOnUiThread(new Runnable() {
   @Override
   public void run() {
       textView.setText(parsedText);
   }
});
// Ведь TextView тоже заслуживает красоты.

Обработка исключений и альтернативные пути навигации

Перехват SaxException

В случае, если в процессе разбора данных возникает ошибка SaxException, JSoup позволит эффективно обработать исключение и сохранит надежность вашего приложения:

Java
Скопировать код
try {
    Document doc = Jsoup.connect(url).get();
} catch (SaxException e) {
    Log.e("HTML парсинг", "SaxException", e);
}

WebView как альтернатива

Если HTML, в котором вы работаете, имеет больше JavaScript, чем вы когда-либо видели на лекциях по информатике, на помощь придет компонент Android WebView. В сочетании с дополнительными библиотеками, WebView решит проблему обработки динамического содержимого HTML.

Визуализация

Можно уподобить парсинг HTML в Android к мастерскому вскрытию замка в поисках ценности:

Markdown
Скопировать код
Android-приложение (🏴‍☠️): Хорошо, давай найдем HTML-сокровища! (⚓️📃)
JSoup (🗝️): Смотри, что у меня получилось...

Действие:

Java
Скопировать код
Document doc = Jsoup.connect("http://example.com").get();
Elements links = doc.select("a[href]");

Результат:

Markdown
Скопировать код
HTML-содержимое (🔓💰): [Ссылка 1 (🔗), Ссылка 2 (🔗), Ссылка 3 (🔗)]
// JSoup: Передача выполнена успешно.

Парсинг HTML: Продвинутый уровень

Упрощенный парсинг с Html.fromHtml

Для коротких HTML-строк, метод Html.fromHtml() в Android быстро превратит их в простой текст:

Java
Скопировать код
String plainText = Html.fromHtml(htmlString, Html.FROM_HTML_MODE_LEGACY).toString();
// В иногда ценим простоту.

Экранирование специальных символов

Не забывайте экранировать специальные символы для безопасной работы с HTML:

Java
Скопировать код
String safeHtml = Html.escapeHtml(unsafeHtml);
// Безопасность на первом месте!

Обновление знаний

В мире Android постоянно происходят обновления. Обязательно изучайте документацию по Android, чтобы быть в курсе последних изменений для Html.fromHtml().

Узнать больше: Онлайн-обучение

Повышайте свои навыки разбора HTML, просто практикующись. Блоги, учебные материалы и ночное чтение только помогут вам в этом. Продолжайте учиться!

Полезные материалы

  1. jsoup: Java HTML parser, designed for HTML editing, cleaning, scraping, and XSS safety — официальный сайт JSoup.
  2. Create dynamic lists with RecyclerView | Android Developers — узнайте, как создать динамический список с помощью компонента RecyclerView для отображения данных.
  3. Обсуждение JSoup на Stack Overflow — практические советы по использованию JSoup.
  4. XmlPullParser | Android Developers — официальная документация по XmlPullParser.
  5. Android – XML Parser — руководство по XML-парсерам.
  6. Как конвертировать Android JSONObject/JSONArray в стандартные Map/List. · GitHub — метод конвертации JSON в структуры Java.
  7. Учебник по JSoup на YouTube.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой фреймворк используется для парсинга HTML в Android?
1 / 5