УДК 004.4
ИЗВЛЕЧЕНИЕ ДАННЫХ С ВЕБ-РЕСУРСОВ, СОДЕРЖАЩИХ РАЗНОРОДНУЮ ИНФОРМАЦИЮ
Д. З. Цхошвили, Н. А. Иванова
ФГБОУ ВО «Брянский государственный университет имени академика И.Г. Петровского»
В работе рассматривается процесс разработки мобильного приложения с использованием java-библиотеки Jsoup для извлечения разнородных данных с веб-ресурса в среде разработки Android Studio.
Ключевые слова: Android Studio, java-библиотека, Jsoup, мобильные приложения, парсинг, веб-ресурс, среда разработки.
Сейчас мобильные приложения находятся на пике своей популярности и внедряются в самые разнообразные сферы жизни. Мобильные устройства - это та технология, которую люди все время держат под рукой, с их помощью можно крайне быстро получить достоверные сведения. Среди большого количества функций смартфонов можно выделить функцию информирования о различного рода событиях. Например, информирование о расходах, расписании дел или о погоде. В данной статье будет описан процесс разработки мобильного приложения с использованием java-библиотеки Jsoup для извлечения разнородных данных с веб-ресурса, которое будет помогать пользователям легко и быстро узнать о том, вышла ли новая серия сериала.
При разработке приложения, содержащего большое количество информации, важно определиться со способом добавления и своевременного обновления данных. Для этого существует несколько подходов, а именно: ручной ввод информации, использование файлов, баз данных и парсинг. Поскольку информация о выходе новых серий появляется часто, то наиболее оптимальным способом является использование технологии парсинга, тогда все данные в приложении будут обновляться автоматически при обновлении информации на сайте.
В качестве веб-ресурса, с которого будут извлекаться данные выбран coldfilm.ru, так как на этом сайте быстрее всего появляются новые серии сериалов в русской озвучке.
Для автоматизированного извлечения информации с веб-страниц существует 4 типа инструментов: headless-браузеры, SaaS решения, настольные приложения и библиотеки [1].
Java-библиотеки являются полезным инструментом при разработке мобильных приложений. Они позволяют не переписывать один и тот же код для каждого приложения, а использовать готовый модуль для решения конкретных задач, таких как работа с файлами, изображениями и видео, работа с базами данных или при извлечении данных с веб-ресурса. Разработчику лишь остается подключить библиотеку и настроить ее в зависимости от своей задачи.
В научной статье «Использование java-библиотек в Android Studio для извлечения информации с веб-ресурсов» были рассмотрены наиболее популярные среди разработчиков java-библиотеки, которые предназначены для реализации парсинга в мобильных приложениях, такие как HtmlCleaner, HTMLParser, NekoHTML, JerichoHTMLParser и Jsoup [2].
Библиотека Jsoup выполняет такие функции, как разбор HTML из строки, файла или URL, поиск данных с использованием CSS или DOM селекторов, взаимодействие с элементами HTML и атрибутами [3].
Несмотря на свою простоту, с помощью библиотеки JSoup можно получить и сгруппировать самые различные данные (текст, картинки, таблицы), чтобы в дальнейшем использовать их в мобильном приложении.
В научной статье «Реализация парсинга средствами Java» был рассмотрен пример использования java-библиотеки Jsoup в процессе разработки простого мобильного
приложения в среде Eclipse, отображающего каталог сериалов, которые выходят на данный момент [4]. С веб-ресурса анализировалась и отбиралась текстовая информация о выпускающихся сериалах.
В данной статье рассмотрим возможности сбора разнородной информации. Мобильное приложение будет не просто отображать каталог сериалов, а будет выводить список появившихся в русской озвучке новых серий сериалов, постеры сериалов и даты их выхода. Разработка приложения будет осуществляться в среде Android Studio, так как она более удобна по сравнению с Eclipse и на данный момент является официальной средой разработки android-приложений.
Процесс разработки данного приложения во многом аналогичен описанному в статье «Реализация парсинга средствами Java». Его можно разделить на три этапа: создание интерфейса, добавление библиотеки в проект и реализация функционала.
Для начала необходимо создать новый проект File/New/Project, задать имя и версию Android, остальные пункты оставить по умолчанию.
Далее нужно настроить цветовую тему приложения. Для этого открыть редактор тем Tools/Android/Theme Editor (рис.1), настроить тему и затем подключить ее к проекту во вкладке редактирования окна. Эта функция в Android Studio значительно облегчает создание интерфейса приложения.
Рис. 1. Редактор тем Android Studio.
Затем на форму activity_main нужно добавить компонент ListView, служащий для отображения списков (рис. 2).
8
а
I
§
§
Рис. 2. Добавление списка на форму.
Далее в папке layout необходимо создать второй файл list_item.xml. Он отображает содержимое элемента списка. Нужно добавить на форму следующие компоненты: текстовое поле - название сериала (name), изображение (flag), и текстовое поле - дату выхода (date)
(рис. 3).
android:layout_centerHorizontal="true" />
android: layout_width="wrap_content" android:layout_height="wrap_content"
android: layout_centerHorizontal="true" />
android:layout_width="wrap_content" android:layout_height="wrap_content"
Рис. 3. Настройка элементов списка.
На этом редактирование интерфейса приложения окончено. Следующий шаг -подключение библиотеки JSoup к проекту. В AndroidStudio удобно работать с библиотеками. В первую очередь, в SDK Manager (англ. Software development kit - содержит в себе разнообразные библиотеки, документацию и инструменты для разработки приложений)
необходимо загрузить пакет Android Support Repository. Он включает в себя скомпилированные версии библиотек. Далее необходимо в главном меню Android Studio выбрать File/Project Structure. В появившемся окне нужно выбрать необходимое приложение и перейти во вкладку Dependencies.
Справа нажать на зеленый значок и выбрать Library dependency (рис. 4). Откроется окно выбора библиотеки. В нем необходимо ввести в поисковую строку название библиотеки JSoup и выбрать предложенную версию.
Рис. 4. Подключение библиотеки JSoup.
На следующем шаге требуется разработать функционал. Открыть файл MainActivity.java и добавить в него следующий код:
Листинг 1
public Void doInBackground(Void... params) { arraylist = new ArrayList<HashMap<String, String>>(); //создание массива try {
arraylist.clear(); //очистка массива
for (int i=1; i <= 3; i++) { //загрузка данных с 1-3 страниц веб-ресурса Document doc = Jsoup.connect(http://coldfilm.ru/news/7page" + i).get(); // соединение с URL-адресом
for (Element div : doc.select("div[class=kino-item ignore-select]")) { HashMap<String, String> map = new HashMap<String, String>(); Elements name = div.select("span b"); //Получение названий сериалов Elements date = div.select("div[class=kino-date icon-left]"); //Получение постеров сериалов
Elements imgSrc = div.select("img[src]");
// Получение атрибута src
String imgSrcStrl = imgSrc.attr("src");
String imgSrcStr = "http://coldfilm.ru" + imgSrcStrl; // Получение полного адреса постеров map.put("name", name.text());
map.put("date", date.text()); // добавление данных в HaspMap map.put("flag", imgSrcStr);
arraylist.add(map); // Добавление извлеченных данных в массив
}
}
Затем необходимо создать файл ListViewAdapter он будет служить адаптером для извлеченных данных (листинг 2).
Листинг 2
public View getView(final int position, View convertView, ViewGroup parent) { TextView name;
TextView date; //описание переменных ImageView flag;
inflater = (Layoutlnflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = inflater.inflate(R.layout.list item, parent, false); //определение layout, на котором будут отображены данные resultp = data.get(position);
name = (TextView) itemView.findViewById(R.id.name); date = (TextView) itemView.findViewById(R.id.date);
flag = (ImageView) itemView.findViewById(R.id.flag); //инициализация переменных name.setText(resultp.get(MainActivity.NAME));
date.setText(resultp.get(MainActivity.DATE)); //вывод извлеченных данных imageLoader.DisplayImage(resultp.get(MainActivity.FLAG), flag); return itemView;
}
Также нужно создать файл ImageLoader [5], с помощью которого будет происходить загрузка изображений (листинг 3).
Листинг 3
private Bitmap getBitmap(String url) { File f = fileCache.getFile(url); Bitmap b = decodeFile(f); if (b != null) return b;
try { //получение изображений с веб-ресурса Bitmap bitmap = null;
URL imageUrl = new URL(http://coldfilm.ru/news/?page");
HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection(); //
соединение с URL-адресом
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close ();
conn.disconnect();
bitmap = decodeFile(f);
return bitmap;
} catch (Throwable ex) {
ex.printStackTrace();
if (ex instanceof OutOfMemoryError)memoryCache.clear();
return null; }
}
После этого нужно отредактировать файл AndroidManifest, добавив разрешение приложению выходить в Интернет (листинг 4).
Листинг 4
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permissionandroid:name="android.permission.INTERNET"/>
На этом разработка приложения закончена, и можно проверить его работоспособность на эмуляторе (рис. 5). В качестве виртуального устройства использовался Nexus One с диагональю экрана 3,7 дюйма и разрешением экрана 480*800 пикселей. Версия Android -
4.4.2. При запуске приложения на экран выводится список вышедших с русской озвучкой серий сериалов, а также их постеры и дата выхода.
1РИВ1
Бесстыдники 8 сезон 5 серия
Дата: Сегодня
Ходячие мертвецы 8 сезон 7 серия
Дата:Сегодня
Рис. 5. Запуск приложения на эмуляторе.
Java-библиотека Jsoup является удобным и полезным инструментом при разработке мобильных приложений, содержащих большое число часто обновляющихся данных. С ее помощью можно извлекать с веб-ресурсов разнородную информацию, такую как текстовые данные, содержимое таблиц и изображения.
Представленный в статье способ использования библиотеки Jsoup для сбора данных будет применяться в разработке приложения «Walk To Cinema&TV», которое будет содержать в себе сведения о датах выхода сериалов, фильмов, рейтинги, каталоги и удобный календарь для наглядного отображения премьер фильмов и ТВ-шоу.
Список литературы
1. Inostudio. Разработка и реализация интернет-проектов [Электронный ресурс]. URL: https://inostudio.com/ru/article/web-parsing.html. (Дата обращения: 04.12.2017).
2. Цхошвили Д.З., Иванова Н.А. Использования Java-библиотек в Android Studio для извлечения информации с веб-ресурсов // Актуальные вопросы в науке и практике. Сборник статей по материалам II международной научно-практической конференции. - 2017. - T. 1(2). - № 1(2). - C. 136-142.
3. Официальная страница JSoup. [Электронный ресурс]. URL: https://jsoup.org. (Дата обращения: 05.12.2017).
4. Цхошвили Д.З., Иванова Н.А. Реализация парсинга средствами Java // Ученые записки Брянского государственного университета». - 2017. - № 2 (6). - C.31-35. [Электронный ресурс]. URL: http//scim-brgu.ru/wp-content/arhiv/UZ-2017-N2.pdf. (Дата обращения: 05.12.2017).
5. Уроки Android-разработки Android Begin. [Электронный ресурс]. URL: http:/^^^^.androidbegin.com/tutorial/android-jsoup-listvi^^-images-t^^ts-html-tables-tutorial. (дата обращения: 04.12.2017).
Android Emulator - device5554
Сведения об авторах
Цхошвили Дарья Зурабовна - магистрант кафедры информатики и прикладной математики, ФГБОУ ВО «Брянский Государственный университет имени академика И.Г. Петровского», e-mail: [email protected].
Иванова Наталья Александровна - кандидат технических наук, доцент кафедры информатики и прикладной математики, ФГБОУ ВО «Брянский Государственный университет имени академика И.Г. Петровского», e-mail: [email protected].
EXTRACTION OF DATA FROM WEB-RESOURCES, CONTAINING DIFFERENT INFORMATION
D. Z. Tskhoshvili, N. A. Ivanova
Bryansk State University named after Academician I.G. Petrovsky
The paper discusses the process of developing a mobile application using the JSoup java library to extract heterogeneous data from a web resource in the Android Studio development environment. Keywords: Android Studio, java-library, Jsoup, mobile applications, parsing, web resource, development environment.
References
1. Inostudio. Development and implementation of Internet projects [Electronic resource]. URL: https://inostudio.com/en/article/web-parsing.html. (Date of circulation: 04.12.2017).
2. Tskhoshvili D.Z., Ivanova N.A. Using Java libraries in Android Studio to extract information from web resources // Actual questions in science and practice. Collected papers on the materials of the II International Scientific and Practical Conference. - 2017. - V. 1 (2). - No 1 (2). -P.136-142.
3. Official page of JSoup. [Electronic resource]. URL: https://jsoup.org. (Date of circulation: 05.12.2017).
4. Zoshvili DZ, Ivanova NA Implementation of parsing by means of Java // Uchenye zapiski Bryanskogo gosudarstvennogo universiteta. - 2017. - № 2 (6). - P. 31-35.
[Electronic resource]. URL: http:// scim-brgu.ru / wp-content / arhiv / UZ-2017-N2.pdf. (Date of circulation: 05.12.2017).
5. Lessons of Android-development Android Begin. [Electronic resource]. URL: http://www.androidbegin.com/tutoria//android-jsoup-/istàew-images-texts-htm/-tab/es-tutoria/. (date of circulation: 04.12.2017).
About authors
Tskhoshvili D.Z. - graduate student, Department of Computer Science and Applied Mathematics, Bryansk State University named after Academician I.G. Petrovsky, e-mail: darya9312@mai/.ru.
Ivanova N.A. - PhD in Technical Science, Associate Professor, Department of Computer Science and Applied Mathematics, Bryansk State University named after academician I.G. Petrovsky, e-mail: ivanova_nata/a@mai/.ru.