Парсинг jsoup android studio

Библиотека jsoup — Суп с котом

Вместо предисловия

Первоначально статья писалась, когда деревья были большими, коты были котятами, Android был версии 2.3, а библиотека jsoup была версии 1.6.1.

С тех пор утекло много воды. Хорошая новость — библиотека подросла до версии 1.13.1, стала чуть меньше размером, стала быстрее работать (почти в два раза). Плохая новость — мои примеры, связанные с интернетом, перестали работать в Android 4.0, так как теперь явно запретили использовать сетевые операции в основном потоке.

Я оставлю старую версию статьи здесь. Если вы пишете программы под старые устройства, то всё остаётся без изменений. Примеры под новые устройства находятся в закрытой зоне 4 курса.

Общая информация

Рассмотрим примеры работы с библиотекой jsoup. Java-библиотека jsoup предназначена для разбора HTML-страниц (парсинг), позволяя извлечь необходимые данные, используя DOM, CSS и методы в стиле jQuery.

Библиотека поддерживает спецификации HTML5 и позволяет парсить страницы, как это делают современные браузеры.

Библиотеке можно подсунуть для анализа URL, файл или строку.

Подключаем библиотеку

В Android Studio пропишите в файле build.gradle строку в блоке зависимостей.

Создаём новый проект JsoupDemo. Добавляем на форму кнопку и TextView.

После установки библиотеки вам нужно получить документ для разбора текста. Это может быть страница на сайте или локальный файл на устройстве. Таким образом вам надо подключиться к нужной странице и получить объект класса Document. При импортировании обращайте внимание на полное название класса org.jsoup.nodes.Document, так как многие пакеты имеют в своём составе одноимённый класс.

Получив документ в своё распоряжение, вы можете извлекать требуемую информацию. Например, вы можете получить все теги meta:

Метод select() позволяет получить нужные теги.

Если нужно получить атрибут тега, то используйте метод attr():

Можно выбрать теги с заданным классом. Например, на странице встречается тег типа

Первый пример для знакомства

Для первого знакомства разберём простой пример. А потом будем его усложнять. Создадим переменную, содержащий html-текст. Далее вызываем библиотеку jsoup и смотрим на результат.

Запустите проект и нажмите на кнопку. На экране отобразится наш текст. Но если вы присмотритесь внимательнее, то заметите некоторые отличия (скорее всего вы и не заметили). Я намеренно сделал две «ошибки». Во-первых, я не закрыл тег , а также не закрыл тег

у первого параграфа. Однако библиотека сама подставила недостающие элементы. Именно так поступают и браузеры, если веб-мастер по невнимательности забывает ставить закрывающие парные теги.

Что мы сделали? Мы передали нужный html-текст библиотеке Jsoup и попросили его осуществить его разбор (метод parse()). В результате мы получаем экземпляр класса Document, из которого с помощью метода html() извлекаем уже обработанный текст, с которым можно работать дальше.

Если у вас всё получилось, то можно перейти к более сложным примерам. Подробная документация по методам и свойствам есть на сайте библиотеки. Вам нужно только пробовать.

Извлекаем заголовок страницы

Заголовок страницы находится в теге . Чтобы получить текст заголовка, воспользуемся методом Document.title():

Извлекаем ссылки

Теперь попробуем поработать с ссылками. В нашем тексте есть ссылка, которую можно разбить на несколько логических элементов: адрес, на который ведёт ссылка, текст в ссылке и полная ссылка, которая объединяет оба элемента.

Начнём с адреса ссылки:

Чтобы получить текст ссылки:

И, наконец, общий вариант:

Разбор текста с сайта

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

Я подключаюсь к самой известной странице в мире http://developer.alexanderklimov.ru/android/ и получаю его заголовок.

Не забудьте установить разрешение на подключение к Интернету вашей программе. Я сам сначала долго тупил, не понимая, почему моя программа вылетала с ошибкой. Но, посмотрев в честные глаза своего кота, я понял в чем моя ошибка и исправил ее. Коты рулят.

Разбор текста из файла

Последний пример, который мы не разобрали — это разбор текста из файла. В этом случае используется метод Jsoup.parse(File in, String charsetName, String baseUri):

Читайте также:  Hancom office viewer для андроид

Попробуйте самостоятельно. Удачи в программировании! Да пребудет с вами кот!

Источник

Getting Started with JSOUP in Android

Nov 22, 2017 · 3 min read

Jsoup is a Java html parser. It is a Java library that is used to parse html documents. Jsoup gives programming interface to concentrate and control information from URL or HTML documents. It utilizes DOM, CSS and Jquery-like systems for concentrating and controlling records.

In this tutorial, you will get to know few steps to start with in parsing html document in an android application interface using Jsoup.

Update

Kindly note that this implementation might not be useful anymore. You can check out for articles that explain this with latest technologies. Thanks! 🙂

Example

This simple android application shows details of Firebase with Jsoup used to parse the logo and title from the web page.

Let’s get s t arted. Create a new android project with an Empty Activity.

Add Jsoup dependency to the app level of your build.gradle file since this is an external library.

Add Internet permission to the Android Manifest file for internet access.

Prepare a layout to display the data that will be fetched from the web page. For example, logo and title.

Go to your MainActivity.java class, in the OnCreate() method, initialize your views. Create an AsyncTask class that will be used to fetch the data in the background before displaying it on the main thread.

Let me explain some lines of codes and elements of Jsoup before calling them in the AsyncTask class.

In the above codes;

Document document = Jsoup.connect(url).get(): Document is a Jsoup node API element used in connecting to the website.

Element img = document.select(“img”).first() : allows the program check through the webpage to get the first since logo is usually placed at the very beginning of the code.

String imgSrc = img.absUrl(“src”): allows the program check through absolute attribute ‘src’ of and get the respective URL.

InputStream input = new java.net.URL().openStream(imgSrc): this downloads the logo from the url.

Bitmap bitmap = BitmapFactory.decodeStream(input): this code creates the logo bitmap.

String title = document.title(): this automatically gets the title of the website.

These lines of codes work at the background process in the doInBackground() method and the respective results are displayed in the onPostexecute() method. Then the AsyncTask class is called to execute in the onCreate() method.

Running the application gives;

This brings us to the end of the tutorial… So far, Jsoup provides a very convenient API for extracting and manipulating data.

Источник

Android Basic JSOUP Tutorial

Last Updated: October 24, 2013

In this tutorial, you will learn how to implement JSOUP open source java library in your Android application. JSOUP provides a very convenient API for extracting and manipulating data, using DOM, CSS, and jquery-like methods. JSOUP allows you to scrape and parse HTML from a URL, file, or string and many more. We will create 3 buttons on the main view and each button will perform different tasks such as showing the website title, description and a logo. So lets begin…

Before you proceed with this tutorial, download the latest JSOUP library from here.

Paste your downloaded Jsoup file into your project libs folder as shown on the image below.

Create a new project in Eclipse File > New > Android Application Project. Fill in the details and name your project JsoupTutorial.

Application Name : JsoupTutorial

Project Name : JsoupTutorial

Package Name : com.androidbegin.jsouptutorial

Open your MainActivity.java and paste the following code.

MainActivity.java

In this activity, we have created three buttons that response to three different AsyncTask. Before I proceed with further explanation, see the steps below on how to get the html source codes from a website.

Step 1 : Visit https://www.androidbegin.com with any preferred Internet browser on your PC

Step 2 : Right-Click on an open space and select “View page source

Step 3 : Website source codes

A website source code determines how your webpages should appear. However, source code of a web page will only display information and code that is not processed by the server.

The first button retrieves the website title. This is a way to get the page title.

Java Code

Website Source Code

The second button retrieves the website description. By using Elements, we are able to specify the exact location of the data.

Java Code

Website Source Code

Читайте также:  Почему не работает андроид систем

The third button retrieves the website logo. By using Elements, we are able to specify the exact location of the data.

Java Code

Website Source Code

Next, create an XML graphical layout for the MainActivity. Go to res > layout > Right Click on layout > New > Android XML File

Name your new XML file activity_main.xml and paste the following code.

activity_main.xml

Next, change the application name and texts. Open your strings.xml in your res > values folder and paste the following code.

strings.xml

In your AndroidManifest.xml, we need to declare permissions to allow the application to connect to the Internet. Open your AndroidManifest.xml and paste the following code.

AndroidManifest.xml

Output:

Source Code

[purchase_link text=”Purchase to Download Source Code” style=”button” color=”green”]

Latest comments

thank you so much!!

Android Basic JSOUP Tutorial

I can’t get bitmap to resolved I have put in import android.graphics.BitmapFactory; and import android.graphics.Bitmap; but bit map is still unresolved what am I doing wrong?

Christian Munch Hammervig

Android Basic JSOUP Tutorial

Because of my app navigation I use Fragments. Is it possible to use your tutorial in my situation?

Android Basic JSOUP Tutorial

hey there,i want to get news post from particular site which doesnt provide feeds over JSON/RSS.i have decided to use this method to scrape the contents,how can i scrape individual posts from the site an put it into list view?

Источник

Android and Jsoup. Парсим вебсайт на вордпрессе. Расписание уроков — часть 3

Приветствую читателей и гостей сайта Компьютерапия. Сегодня в который раз мы продолжим «мучать» по многочисленным просьбам наше приложение для android — расписание уроков для 11-6 классов.

Некоторое время тому назад я опубликовал статью и видео о преимуществах регистратора доменных имен Reg.ru и наглядно показал как сделать перенос WordPress сайта с локального компьютера на хостинг reg.ru.

Давайте сегодня сделаем апгрейт нашего приложения и научим его парсить веб страницы, заранее созданные, по определенным правилам, что бы у нас во фрагменты грузились данные с вебсайта по дням для каждого класса отдельно.

Проект в Android Studio

И сразу, пока не забыли, давайте в файл AndroidManifest.xml внесем пользовательские разрешения для работы с интернетом,

иначе наше приложение и не стоит и пытаться написать.)))

В Android Studio будем использовать проект из предыдущего урока, полностью код с нуля писать не будем, сохраните проект под другим именем.

Для тех кто не знаком с проектом, вкратце пробежимся по его структуре. У нас две активности и пять фрагментов, первая активность обрабатывает нажатие на кнопки с номером класса, и передает параметр classId с номером класса. Вторая активность управляет созданием и отображением фрагментов. В коде фрагментов происходит загрузка данных, каждый фрагмент отвечает за конкретный день недели.

Если вы не знаете или забыли, как работать с фрагментами, то прочтите статью Создание фрагментов и использование вкладок для Android.

По сравнению с прошлым проектом, в первой активности изменений нет, единственное, что я изменил, это имя вызываемой через Intent второй активности. Во второй активности — в конструкции switch-case вписал полное имя пакета перед классом фрагмента. Почему? Потому-что Android Studio 3.0.1, капризная как не знаю кто. )))

Во фрагментах убраны переменные и классы, относящиеся к DatabaseHelper, и добавлены новые переменные

Переменная private ListView mList будет использоваться из прошлого урока, так как она связана с элементом ListView android:id=»@+id/android:list» в каждом фрагменте, для отображения текста в TextView uroki файла item.xml.

Фрагмент получает параметр classId, который участвует в формировании и отображении данных. Как вы помните, fragment_main11 отвечает за данные понедельников, а classId отфильтровывает данные для каждого класса.

В onActivityCreated добавьте следующий код

(это асинхронный поток и текстовый адаптер, для связи со списком уроков) и под ней новый класс, действующий в фоновом режиме

Подключаем библиотеку JSoup

В этом классе мы обращаемся к jar библиотеке JSoup, которую нужно скачать и добавить в папку libs вашего проекта. В любом поисковике наберите “jsoup for android”, скачайте по ссылке и поместите в проект. После этого библиотека будет видна в Android Studio. В зависимости в файле build.gradle добавлять ее не нужно, так как запись

уже сама добавит любой jar файл в проект из папки libs.

А во фрагменте переменная doc типа Document, Jsoup делает подключение connect к адресу страницы, которую необходимо спарсить и в content из doc методом select выбирается класс poned элемента ul списка li. Для фрагмента, отвечающего за вторник в методе select будет такая запись: «.vtorn >li».

Читайте также:  Форматирование разделов android fastboot

Наш тестовый сайт на WordPress

Для наглядности перейдем на сайт и посмотрим, как организовать страницы в WordPress. Надеюсь вы уже зарегистрировались в Reg.ru, купили домен и хостинг, установили на него WordPress, сделали свой сайт, и теперь нужно создать шесть страниц(11 класс, 10 класс и т.д.) для парсинга, со списком уроков по дням.

HTML код страниц

В html коде список выглядит вот так, h2 — заголовок дня на странице ul с классом дня недели и строки списка li.

Наше приложение будет ориентироваться на класс элемента ul, и во фрагмент будет загружаться только нужная информация.

Так расписание уроков выглядит на сайте, это поддомен моего сайта, все страницы и подкатегории я поместил в меню и с этих страниц данные будут парситься в наше приложение.

Вернемся в Android Studio, и я хочу напомнить что в пятом фрагменте будет использоваться класс «pyatn», отвечающий за пятничное расписание. Вы спросите, почему в адресе страницы два раза стоит classId?

Потому что адрес страниц в WordPress и поддкатегорий содержит номер класса, меняя этот параметр, мы меняем адрес страницы, в зависимости от нажатой кнопки.

Если не создавать подкаталог для класса, а в sitewordpress.maxfad.ru /raspisanie-urokov/ поместить страницы сразу то запись можно было сократить. Так же в моем случае имя страницы получилось без расширения .html и заканчивается слешем «/». Если вы захотите использовать этот пример под свои нужды, то обратите на это внимание.

Далее происходит очищение titleList и в цикле происходит перебор элементов li, за конкретный день, и все они добавляются в titleList

и через onPostExecute данные попадают в адаптер а затем в ListView во фрагменте.

Тест приложения в эмуляторе

Запустим наше приложение в эмуляторе, и нажав на любую кнопку класса (11-6) будет открыто расписание уроков по дням для данного класса. Нажимая на вкладки и меняя тем самым день недели, информация будет парситься с нашего тестового сайта.

Давайте проведем маленький эксперимент и выберем, например 9-класс, вторник и на сайте отредактируем страницу, что бы увидеть как будут происходить изменения в приложении. Изменим первый урок Математика, сделав два урока 2*Математика. ))) Нажмем на кнопку Обновить и перейдем на страницу сайта, обновив и там.

Выберем другой день недели в приложении и снова вернемся во Вторник(ВТ). Информация, увы не обновилась, или нужно больше времени, хотя если закрыть этот фрагмент и нажать на кнопку 9 класс, то во вторнике данные обновятся. Напишите в комментариях как можно улучшить код, что бы обновление происходило «на лету». Исправим текст как было раньше, Обновимся, в приложении выйдем и зайдем снова в 9 класс и данные опять совпадут с сайтом.

Еще раз покажу как устроены наши странички, делал html код в excel таблице, ссылка на скачивание «генератора расписания уроков» и архива с проектом будет доступна на сайте. Я создавал шесть страниц, на каждой странице по шесть уроков каждый день, с понедельника по пятницу включительно. Для каждого класса и каждого дня уроки отличаются, хотя и кое где повторяются. Но ведь это всего лишь пример!)))

Возможное развитие проекта

Однако, учитель, классный руководитель или директор школы, обладая простейшим навыком работы с компьютером, и умея работать с WordPress, может за 5 минут, с администраторской учеткой, внести необходимые изменения на странице, и в приложении расписание уроков будет централизованно обновлено.

Хотя данный пример охватывает только одну неделю, даже при таком функционале приложение вполне имеет право на жизнь. И этот пример вообще можно использовать не только в школе, а хоть для диеты, расписания автобусов, списков покупок, фильмов в кинотеатре, театре. Словом всюду, где не требуется менять данные очень часто.

А что бы сделать такое приложение, нужно всего лишь зарегистрироваться на сайте Reg.ru, купить домен и хостинг, создать свой сайт, написать приложение в Android Studio. и поделиться этим видео и статьей с друзьями)))

Архив с проектом приложения и Excel генератор кода расписания уроков в HTML можно скачать по этой ссылке.

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

В этом видео показано как парсить вебсайт на вордпрессе с помощью Android Studio и Jsoup:

Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

Источник

Оцените статью