Задать вопрос

Android парсинг HTML?

Добрый день, разбирал вот этот пример habrahabr.ru/blogs/android/91815/, кусок кода, где парсится профиль пользователя для нахождения аватарки. Там всё реализовано через работу со строкой — один substring().

Возник вопрос: Можно ли пробежаться по DOM полученного документа, как, например, с jQuery, опираясь на классы и идентификаторы элементов?

Или, может, подскажите более гуманный метод получения данных со страницы.

Спасибо!
  • Вопрос задан
  • 11305 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
Hoorsh
@Hoorsh
Digital-специалист, веб-разработчик
Скажите, какая стоит задача? Ведь можно использовать регулярки.

Вот, например, как я вытягивал значения с html-странички:

    public String GetTemper(String urlsite) // фукция загрузки температуры
    {
        String matchtemper = "";
        try
        {
                // загрузка страницы
            URL url = new URL(urlsite);
            URLConnection conn = url.openConnection();
            InputStreamReader rd = new InputStreamReader(conn.getInputStream());
            StringBuilder allpage = new StringBuilder();
            int n = 0;
            char[] buffer = new char[40000];
            while (n >= 0)
            {
                n = rd.read(buffer, 0, buffer.length);
                if (n > 0)
                {
                    allpage.append(buffer, 0, n);                    
                }
            }
            // работаем с регулярками
            final Pattern pattern = Pattern.compile
            ("<span style=\"color:#[a-zA-Z0-9]+\">[^-+0]+([-+0-9]+)[^<]+</span>[^(а-яА-ЯёЁa-zA-Z0-9)]+([а-яА-ЯёЁa-zA-Z ]+)");
            Matcher matcher = pattern.matcher(allpage.toString());
            if (matcher.find())
            {    
                matchtemper = matcher.group(1);            
            }        
            return matchtemper;
        }
        catch (Exception e)
        {
            
        }
        return matchtemper; 
    };
Ответ написан
eforce
@eforce
Тема интересная, погуглил немного и понял, что парсинг делают с помощью разбора Xml, правда подход спорный, т.к. html не всегда является валидным Xml, что касается библиотек для работы с Dom, то на сегодняшний день, я так понимаю, ничего подобного нет.

Ссылки, которые могут быть полезны:
Android HTML Dom (ссылка в ответе)
Android parsing HTML entities using DOM parser for RSS feed
Ответ написан
Комментировать
@nocach
Для ваших целей можно использовать, например, htmlcleaner. Простенькая библиотека для дом-парсинга.
Еще есть Html Parser, он довольно громоздкий, но зато поддерживает CSS селекторы.
В плане скорости, конечно же лучше всего будет воспользоваться SAX xml парсером.
Ответ написан
Комментировать
leviathan
@leviathan
В своем приложении я для этой цели пользуюсь связкой TagSoup (генератор валидного XHTML из практически любого HTML) и SAX Parser. Работает неплохо.
Ответ написан
Комментировать
leviathan
@leviathan
Еще забыл — с версии 2.2 (кажется) в Android наконец добавили поддержку XPath, по уму это как раз инструмент для этой цели. Но опять же, нужен TagSoup или другой инструмент, чтобы получить валидный xhtml.
Ответ написан
Комментировать
@deep_orange
Самый гуманный Jsoup . Просто и быстро. Только вот у меня на Android 4.4 почему то тормозит нереально (в то время как на 2.2 тот же код летает). В общем проверяйте на виртуальных машинах.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы