Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

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

07.01.2013, 14:00. Просмотров 558. Ответов 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, в котором я получаю эти данные, я вижу такую картину:
[IMG]http://i037.***********/1301/b4/c10da4c5c9e8.jpg[/IMG]

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

Конечная идея - выводить построчно в другой ListView инфу вида "Персонаж - имя артиста".
Был бы очень рад советам, как мне выдернуть из вышеописанного TagNode нужные мне строки!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 14:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка результатов парсинга (HtmlParser) (Программирование Android):

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

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

Выкачать XML с сервера или сайта для последующего парсинга - Программирование Android
Подскажите как можно выкачать XML из сайта или сервера? скорей всего качаться будет с сайта примерный путь www.sitename.com/XML/file.xml

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

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

Обработка ошибки при загрузке для парсинга xml файла - C#
вот код var client = new HttpClient(); var uri = new Uri(&quot;http://www.cbr.ru/scripts/XML_daily.asp&quot;); using ( var stream = await...

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

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

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

HTMLParser - ошибка памяти - Objective-C
Делаю парсинг 9000 страниц, возникает ошибка: Parser(426,0xb0093000) malloc: *** mach_vm_map(size=8388608) failed (error code=3) ***...

Обработка результатов экзамена. - C++ Builder
Нужна программа которая которая обрабатывает результаты экзамена. Для каждой оценки программа должна вычислить процент от общего количества...

Обработка результатов поиска - PHP
Здравствуйте Прошу помощи в следующей проблеме. Имеется большой текст, в нем имеются заголовки вида Заголовок статьи, подобных заголовков...

Обработка результатов экзамена - Pascal ABC
помощи ищу) Написать программу которая обрабатывает результаты экзамена.Для каждой оценки программа должна вычислить процент от общего...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.01.2013, 18:10
Ответ Создать тему
Опции темы

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