Russian Qt Forum
Ноябрь 23, 2024, 16:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Опять... Парсинг HTML  (Прочитано 5347 раз)
bkmz
Гость
« : Июль 16, 2010, 17:56 »

Приветствую. Понадобилось тут мне вытащить из html страничек данные.
Код:
<div class="load"><a href="http://d1.vpleer.ru/download2/6/5069/18024145/cdbc4143ba55/%D0%A1%D0%94_%26amp%3B_%D0%90%D1%80%D0%B8%D1%8F-%D0%97%D0%B0%D1%81%D1%8B%D0%BF%D0%B0%D0%B9_%28Joker_Prod%29.mp3" title="Скачать"><img src="/images/load.gif" width="8" height="8" alt="Скачать"/></a></div>
Вот такого вида кусок кода на выходе я должен получить ссылку на mp3.
Пробовал делать как в примере к capturedTexts() - ничего не вышло. Паттерн следущий:
Код:
(<div class=\"load\"><a href=\")(title=\")
QStringList на выходе  3 пустых элемента.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #1 : Июль 16, 2010, 18:31 »

хз о каком примере ты. Обычные регвыры.
Код
C++ (Qt)
QString strSearch,
        strUrl;
strSearch = "<div class=\"load\"><a href=\"http://d1.vpleer.ru/download2/6/5069/18024145/cdbc4143ba55/%D0%A1%D0%94_%26amp%3B_%D0%90%D1%80%D0%B8%D1%8F-%D0%97%D0%B0%D1%81%D1%8B%D0%BF%D0%B0%D0%B9_%28Joker_Prod%29.mp3\" title=\"Скачать\"><img src=\"/images/load.gif\" width=\"8\" height=\"8\" alt=\"Скачать\"/></a></div>";
QRegExp rxp("<a href=\"(.+mp3)");
rxp.indexIn(strSearch);
if (rxp.capturedTexts().size() == 2) strUrl = rxp.cap(1);
else
{
 // сделать чего-то, если html другой
};
qDebug() << strUrl;
 
output: "http://d1.vpleer.ru/download2/6/5069/18024145/cdbc4143ba55/%D0%A1%D0%94_%26amp%3B_%D0%90%D1%80%D0%B8%D1%8F-%D0%97%D0%B0%D1%81%D1%8B%D0%BF%D0%B0%D0%B9_%28Joker_Prod%29.mp3"
 
« Последнее редактирование: Июль 16, 2010, 18:47 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
bkmz
Гость
« Ответ #2 : Июль 16, 2010, 19:48 »

Спасибо. Ваш пример работает только для одного блока <div>
У меня есть страница в котрой их больше 30. Мне нужно выцепить только урлы, _http://vpleer.ru/?q=Nightwish Вот отсюда. Сейчас попробую сам подкрутить данную комбинацию.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #3 : Июль 16, 2010, 19:50 »

Спасибо. Ваш пример работает только для одного блока <div>
Так никто не говорил что их много. А если их и много, то тоже просто. Набирайся опыта.
Записан

kubuntu/Win7/x64/NetBeans
bkmz
Гость
« Ответ #4 : Июль 16, 2010, 19:54 »

Спасибо. Ваш пример работает только для одного блока <div>
Так никто не говорил что их много. А если их и много, то тоже просто. Набирайся опыта.
Он мне выводит кучу лишних тегов, куда копать? я просто в регулярках ноль
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #5 : Июль 16, 2010, 19:56 »

копать в сторону извлечения всех "<div class=\"load\">...</div>" из всей страницы. Как вариант - выуживать все ссылки страницы, заканчивающиеся на mp3, но малость рискованно это, мало ли. А регвыры надо знать, без них парсеры не парсеры.
Записан

kubuntu/Win7/x64/NetBeans
bkmz
Гость
« Ответ #6 : Июль 16, 2010, 19:57 »

копать в сторону извлечения "<div class=\"load\">...</div>" из всей страницы. Как вариант - выуживать все ссылки страницы, заканчивающиеся на mp3, но малость рискованно это, мало ли. А регвыры надо знать, без них парсеры не парсеры.
Вот именно, как мне вытащить то что находится между ними?
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #7 : Июль 16, 2010, 20:00 »

так выше код же Шокированный
в цикле подставляешь для strSearch каждый такой див и вытягиваешь ссылки
Записан

kubuntu/Win7/x64/NetBeans
bkmz
Гость
« Ответ #8 : Июль 16, 2010, 20:07 »

так выше код же Шокированный
в цикле подставляешь для strSearch каждый такой див и вытягиваешь ссылки
У меня все дивы в одном стринге. Там вся страница. Я не могу понять, как их выудить можно?
« Последнее редактирование: Июль 16, 2010, 20:10 от bkmz » Записан
bkmz
Гость
« Ответ #9 : Июль 16, 2010, 20:16 »

Код:
QString strUrl;
QRegExp rxp("<a href=\"(.+mp3)");
rxp.indexIn(requestString);
qDebug() << rxp.captureCount();
вот этот код выводит 1!!!! в requestString'e вся стринца, весь html код.
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #10 : Июль 16, 2010, 20:22 »

Код:
QString strUrl;
QRegExp rxp("<a href=\"(.+mp3)");
rxp.indexIn(requestString);
qDebug() << rxp.captureCount();
вот этот код выводит 1!!!! в requestString'e вся стринца, весь html код.

у тебя там див, блин, должен быть, а не вся страница.
Надо:
1. Извлечь все дивы с ссылками
2. Извлечь ссылки из дивов.

Все дивы, пример:
Код
C++ (Qt)
QString strSearch;
QStringList listDivs;
strSearch = "<br><br><div class=\"load\"><a href=\"http://d1.vpleer.ru/download2/6/5069/18024145/cdbc4143ba55/%D0%A1%D0%94_%26amp%3B_%D0%90%D1%80%D0%B8%D1%8F-%D0%97%D0%B0%D1%81%D1%8B%D0%BF%D0%B0%D0%B9_%28Joker_Prod%29.mp3\" title=\"Скачать\"><img src=\"/images/load.gif\" width=\"8\" height=\"8\" alt=\"Скачать\"/></a></div>sdf sdf sdf asf asdf asdf asdf asdf asf <a href=\"1.php\"></a><div class=\"load\"><a href=\"http://d1.vpleer.ru/download2/6/5069/18024145/cdbc4143ba55/%D0%A1%D0%94_%26amp%3B_%D0%90%D1%80%D0%B8%D1%8F-%D0%97%D0%B0%D1%81%D1%8B%D0%BF%D0%B0%D0%B9_%28Joker_Prod%21.mp3\" title=\"Скачать\"><img src=\"/images/load.gif\" width=\"8\" height=\"8\" alt=\"Скачать\"/></a></div>";
QRegExp rxp("(<div class=\"load\"><a href.+</div>)");
rxp.setMinimal(true);
int pos = 0;
 
while ((pos = rxp.indexIn(strSearch, pos)) != -1)
{
 listDivs << rxp.cap(1);
 pos += rxp.matchedLength();
}
 
qDebug() << listDivs;
 

С контейнером дивов понятно же что делать? Всё.
« Последнее редактирование: Июль 16, 2010, 20:26 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
bkmz
Гость
« Ответ #11 : Июль 16, 2010, 20:28 »

Все. Спасибо. Остальное завтра разгребать буду)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 23.