Выбор инструмента для получения данных.




Для получения данных парсеры взаимодействуют с разметкой документов, написанной на языке разметки HTML (либо XML). Существует 2 вида парсеров:

1) SAX (англ. Simple API for XML) – способ последовательного чтения и/или записи HTML/XML-файлов. В ходе последовательного чтения SAX-парсер сообщает вызвавшему приложению о встреченных элементах разметки, а программист в своюочередь описывает нужную обработку данных событий.

2) DOM (англ. Document Object Model) позволяет представить любой документ известной структуры в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут или иной объект. Узлы связаны между собой отношениями «родитель – потомок». DOM- парсеры сначала загружают весь документ разметки, а на выходе представляют дерево, из которого можно получить доступ к содержимому документа.

Что такое Jsoup.

Jsoup это open-source Java библиотека для работы с реальным HTML. Она обеспечивает очень удобный API для извлечения и манипулирования данными, используя лучшие DOM, CSS, и JQuery-подобные методы. Jsoup реализует WHATWG HTML5 спецификацию, и разбирает HTML в ту же модель DOM, как это делают современные браузер вроде Chrome и Firefox. Вот некоторые из полезных функций Jsoup библиотеки:

- Jsoup может очистить и разобрать HTML из URL, файла или строки.

- Jsoup может найти и извлечь данные используя обход DOM или CSS селекторы.

- Jsoup позволяет манипулировать HTML элементами, атрибутами и текстом.

- «Аккуратный» HTML на выходе: при разборе HTML-текста библиотека исправляет ошибки наподобие незакрытых тегов.

Jsoup предназначен для работы с различными видами HTML существующими в реальном мире, включая должным образом подтвержденный HTML c неполным неподтвержденным набором тэгов. Одно из основных преимуществ Jsoup это его надежность.С помощью него очень просто разобрать HTML, все что Вам нужно это вызвать статический метод Jsoup.parse() и передать в него Вашу HTML строку. Jsoup предоставляет несколько перегруженных методов parse() для чтения HTML из строки, файла, из базового URI, из URL и из InputStream. Вы также можете указать кодировку, для корректного чтения HTML файла.[A5]

Получение данных.

Для получения данных используется сторонняя Java-библиотека jsoup. Кроме того, необходимо предоставить приложению доступ в Интернет. Для этого в файл AndroidManifest.xml нужно дописать следующую строку:

<uses-permissionandroid:name="android.permission.INTERNET"/>

 

В самомклассе Parser надо прописать импорт следующих классов:

importjava.util.List;

importorg.jsoup.nodes.Document;

importorg.jsoup.nodes.Element;

importorg.jsoup.nodes.Node;

importorg.jsoup.parser.CharacterReader;

importorg.jsoup.parser.HtmlTreeBuilder;

importorg.jsoup.parser.ParseError;

importorg.jsoup.parser.ParseErrorList;

importorg.jsoup.parser.ParseSettings;

importorg.jsoup.parser.Tokeniser;

importorg.jsoup.parser.TreeBuilder;

importorg.jsoup.parser.XmlTreeBuilder;

 

Информация о расписании университета берется с сайта «bsu.ru», и для начала работы необходимо подключитьсяк нужной странице и получить объект класса Document:получаем данные методом GET

org.jsoup.nodes.Document doc = Jsoup. connect ("https://bsu.ru/rasp/?g=" +groupeNum).get();

 

После подключения нужно извлечь требуемую информацию:

Elements elements = doc.select("div.week");/**разбиваемпонеделям**/

 

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

Далее в цикле для каждого элемента списка извлекается нужная информация:

 

for (Element element: elements) {

Elements el = element.select("table.rasp_week");

for (Element element1: el) {

Elements elements1 = element1.select("td");

for (Element element2: elements1) {

Elements day = element2.select("h3.rasp_day");/*получаемдень**/

for (Element element3: day) {d = element3.text();}

Elements time = element2.select("td.rasp_time");/**время**/

for (Element element3: time) {t = element3.text();}

Elements subj = element2.select("td.rasp_subj");/**предмет**/

for (Element element3: subj) {s = element3.text();}

Elements type = element2.select("td.rasp_subj_type"); /**тип**/

for (Element element3: type) {st = element3.text();}

Elements aud = element2.select("td.rasp_aud");/**номераудит**/

for (Element element3: aud) {a = element3.text();}

Elements week = el.select("table.rasp_week").prev();/*№ недели*/

for (Element element3: week) {w = element3.text();}

Elements name = element2.select("td.rasp_aud").next();/**следующийэлементпосленомера аудитории - имя преподователя**/

for (Element element3: name) {n = element3.text();

/**если день недели совподает то вывести то формируем список**/

if (dayOfWeek.equals(d)) {scheduler = w + "\r\n" +

"Время: " + t + "\r\n" + "Название предмета: " + s + "\r\n" + "Тип пары: " + st +

" Аудитория: " + a + "\r\n" + "Имя преподавателя: " + n + "\r\n\r";

my.add(scheduler); /**добавляем строку в список строк **/

 

[A1]Примерно отсюда 2 глава должна начинаться, вроде бы

[A2]HДа откуда вы это берете? HTTP-запрос у нас.

[A3]Почему в виде рисунка? Лучше сделать непосредственно в виде текста кода

[A4]

[A5]Этот рисунок не нужен. Далее можно показать, что получение HTML-содержимого выполняется с помощью метода Jsoup.connect(). Можно показать саму HTML-страницу, которую мы получаем. Попробовать нарисовать ее DOM-структуру. Или хотя бы структуру таблицы с расписанием.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: