Сведения о вопросе

krutoi

19:27, 25th August, 2020

Теги

Android парсинг HTML?

Просмотров: 420   Ответов: 6

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

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

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

Спасибо!



  Сведения об ответе

JUST___

00:27, 1st August, 2020

Скажите, какая стоит задача? Ведь можно использовать регулярки.

Вот, например, как я вытягивал значения с 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; 
    };


  Сведения об ответе

qwerty101

22:53, 2nd August, 2020

Тема интересная, погуглил немного и понял, что парсинг делают с помощью разбора Xml, правда подход спорный, т.к. html не всегда является валидным Xml, что касается библиотек для работы с Dom, то на сегодняшний день, я так понимаю, ничего подобного нет.

Ссылки, которые могут быть полезны:
Android HTML Dom (ссылка в ответе)
Android parsing HTML entities using DOM parser for RSS feed


  Сведения об ответе

lool

16:28, 23rd August, 2020

Для ваших целей можно использовать, например, htmlcleaner. Простенькая библиотека для дом-парсинга.
Еще есть Html Parser, он довольно громоздкий, но зато поддерживает CSS селекторы.
В плане скорости, конечно же лучше всего будет воспользоваться SAX xml парсером.


  Сведения об ответе

JUST___

13:29, 15th August, 2020

В своем приложении я для этой цели пользуюсь связкой TagSoup (генератор валидного XHTML из практически любого HTML) и SAX Parser. Работает неплохо.


  Сведения об ответе

9090

20:53, 28th August, 2020

Еще забыл — с версии 2.2 (кажется) в Android наконец добавили поддержку XPath, по уму это как раз инструмент для этой цели. Но опять же, нужен TagSoup или другой инструмент, чтобы получить валидный xhtml.


  Сведения об ответе

PROGA

22:20, 14th August, 2020

Самый гуманный Jsoup . Просто и быстро. Только вот у меня на Android 4.4 почему то тормозит нереально (в то время как на 2.2 тот же код летает). В общем проверяйте на виртуальных машинах.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться