Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Обработка результатов парсинга (HtmlParser)

07.01.2013, 14:00. Просмотров 618. Ответов 6
Метки нет (Все метки)

Добрый день!
Сразу оговорюсь, что я начинающий и могу использовать иногда неправильную терминологию.

Выполняю следующую задачу:
Используя HtmlParser, обрабатываю один театральный сайт следующим образом:
1. Вывожу список спектаклей на текущий месяц в ListView.
2. При нажатии на спектакль парсится другая страница, и выводится состав исполнителей.

Афишу обрабатываю легко, проблем нет, т.к. каждое название спектакля удобно представлено в HTML коде:
HTML5
1
<a class="n2" href="/afisha/iolanta/?session=296">Название спектакля</a>
Также без проблем выдёргиваю ссылку на страницу с составами и парсю её.
Но вот на ней и начинается всё кино: список исполнителей указан не по одному, как в вышеприведённом участке кода, а в куче:
HTML5
1
2
3
4
5
<div class="personal-block clearfix">
Персонаж_1 - <span style="color: rgb(255, 102, 0);"><strong>Иван Иванов</strong></span><br />
Персонаж_2 - <span style="color: rgb(255, 102, 0);"><strong>Пётр Петров</strong></span><br />
...
</div>
В связи с чем вычитанные данные представляют собой очень неприятную кашу.

Анализируя объект TagNode, в котором я получаю эти данные, я вижу такую картину:


Где в array[0] -> content -> value лежит имя персонажа,
а аж в array[1] -> children -> array[0] -> children -> array[0] -> children -> array[0] -> value - артист
array[2] - ненужная мне информация. И так далее, по три элемента массива, располагается вся эта инфа.

Конечная идея - выводить построчно в другой ListView инфу вида "Персонаж - имя артиста".
Был бы очень рад советам, как мне выдернуть из вышеописанного TagNode нужные мне строки!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 14:00
Ответы с готовыми решениями:

Ошибка парсинга данных
Здравствуйте, пытаюсь через локальный сервер получать данные из БД в виде json....

Библиотеки для парсинга json массива
Всем привет! Подскажите, пожалуйста, какую-нибудь хорошую стороннюю библиотеку...

Обновление RecyclerView после парсинга карточек
Доброго времени суток. Использую RecyclerView + CardView, добавляю туда...

Выкачать XML с сервера или сайта для последующего парсинга
Подскажите как можно выкачать XML из сайта или сервера? скорей всего качаться...

В чем преимущество использования библиотеки GSON перед стандартными средствами парсинга JSON?
В чем преимущество использования библиотеки GSON перед JSONObject JSONArray то...

6
Petro345
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 10
07.01.2013, 14:16 #2
там так и написано:
Персонаж_1
?
В любом парсере есть циклы, пропуски кода и т.д.
Поэтому, в общем случае надо пропускать ноды, если пропуски регулярной структуры.
Если в диве лежит XML структура, то удобно использовать парсер для XML
0
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
07.01.2013, 14:25  [ТС] #3
Petro345, нет, написаны были реальные персонажи и имена - я оформил просто код, абстрагируясь от имён))

Т.е. вы имеете в виду, что я могу отфильтровать нужные мне элементы ещё на этапе парсинга? А то я для себя сделал вывод, что парсер свою работу уже выполнил, а дальше мне как-то самому надо разгребать..
Буду тогда детальней читать доки по парсеру, спасибо..
0
Petro345
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 10
07.01.2013, 14:32 #4
ну замени ФИО на Иванов и Петров.
Будет видно в чём проблема
0
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
07.01.2013, 17:15  [ТС] #5
Цитата Сообщение от Petro345 Посмотреть сообщение
ну замени ФИО на Иванов и Петров.
Будет видно в чём проблема
Что-то я не могу понять, что вы имеете в виду..
0
Petro345
0 / 0 / 0
Регистрация: 06.01.2013
Сообщений: 10
07.01.2013, 17:32 #6
если у тебя там где Персонаж_1 - валидный (т.е. реальный) текст. И все скобки - теги соблюдены.
То прямо как ты написал, пропускать руками элементы массива - нормальный вариант.
HTML сама по себе сложная и неформальная структура.
imho
0
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
09.01.2013, 18:10  [ТС] #7
Как я в конечном итоге решил свою проблему.
Не факт, что окончательный, но всё-таки вариант:

Афишу я парсил таким образом:
Java
1
2
3
4
5
TagNode linkElements[] = rootNode.getElementsByName(Filter, true);   // Filter == "a" - выбрал все ссылки
...
String classType = linkElements[i].getAttributeByName(Attribute);      // Attribute == "class" - беру все классы (как-то так:) )
...
if (classType != null && classType.equals(Classname))                // Classname == "n2" - выбрал все названия спектаклей
Афиша в HTML устроена таким образом:
HTML5
1
2
3
<a class="n2" href="/afisha/iolanta/?session=296">Іоланта</a>
...
<a class="n2" href="/afisha/luskunchik-p-chajkovskij/?session=297">Лускунчик</a>
А для имён артистов Filter = "span", Attribute = "style", Classname = "color: rgb(255, 102, 0);"
Т.к. ФИО артистов выделены цветом:
HTML5
1
Шарплес - <strong><span style="color: rgb(255, 102, 0);">Михайло Кірішев<br /></span></strong>
После подобных действий у меня красиво в два массива ложатся названия спектаклей и ФИО артистов.
Моя прога выводит список спектаклей на текущий месяц, а по клику на каждом - состав артистов.

Единственное, что я пока не освоил - это вычитку персонажей. Как-то они так неудобно лежат в коде, что пока моих мегазнаний парсинга не хватает, чтобы их корректно выдернуть.
Через "одно место" я их вычитать могу, но красиво - пока никак. И, так как персонажи в спектакле всегда одни и те же, а меняются лишь артисты, то я сделал XML-файл с перечнями персонажей, а потом подставляю им в соответствие вычитанных артистов.

Вобщем, такая фигня.
Если у кого-то есть мнение (а скорей всего так и есть)) ), что я сделал это криво, то очень был бы рад выслушать!
0
09.01.2013, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2013, 18:10

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

Обработка ошибки при загрузке для парсинга xml файла
вот код var client = new HttpClient(); var uri = new...

HTMLParser - ошибка памяти
Делаю парсинг 9000 страниц, возникает ошибка: Parser(426,0xb0093000) malloc:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru