Russian Qt Forum
Ноябрь 22, 2024, 20:16
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Алгоритмы
>
Парсинг строки адреса
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Парсинг строки адреса (Прочитано 7923 раз)
TemaTre
Гость
Парсинг строки адреса
«
:
Май 09, 2012, 20:08 »
Ребят мне тут дали задание распарсить строки и выявить одинаковые. Задание такое: (в общем пишем тестирующую программу для сайта)
1. Рекурсивно обойти сайт и выловить все ссылки
2. Ссылки вида:
http://site/page?first=11&second=22
надо отловить и привести к стандартному виду (ну как мне говорили что значения аргументов не важны)
3. удалить похожие ссылки
Проблема в том что я новичек в работе с сайтами. То есть я ХЗ какой вид может принимать строка адреса в браузере, где об этом почитать? Я понимаю, что написать парсер это элементарно (2 вложеных цикла и 2 сплита), но вот где узнать общий вид строки? А то напишу парсер принесу насяльнике, а он ругаться будет. Я понимаю что ГУГЛ рулит, но что-то не получается ничего найти, можете если что тыкнуть носом и посоветовать мне хорошие курсы ГУГЛинга.
Записан
alexis031182
Гость
Re: Парсинг строки адреса
«
Ответ #1 :
Май 09, 2012, 20:19 »
http://ru.wikipedia.org/wiki/URL
Записан
crazymonkey
Гость
Re: Парсинг строки адреса
«
Ответ #2 :
Май 09, 2012, 22:17 »
Посмотрите в сторону
QNetworkAcess: QNetworkRequest, QNetworkReply
Возможно с разбором строки могут возникнуть проблемы.
QRegExp иногда не работает как надо; можно в приниципе посмотреть в сторону QRegularExpression
https://dangelog.wordpress.com/2012/04/07/qregularexpression/
Записан
V1KT0P
Гость
Re: Парсинг строки адреса
«
Ответ #3 :
Май 09, 2012, 22:28 »
Цитата: crazymonkey от Май 09, 2012, 22:17
QRegExp иногда не работает как надо;
Приведи хоть один пример где он работает неправильно. Именно неправильно работает, а не неправильно составленная регулярка.
Записан
crazymonkey
Гость
Re: Парсинг строки адреса
«
Ответ #4 :
Май 09, 2012, 22:40 »
Я лично никогда не сталкивался с ненормальным поведением этого класса (сложных регулярок не писал).
Совет не использовать QRegExp был дан по двум причинам:
1) Его уберут в Qt 5.
2) Иногда читая форумы по Qt натыкался на вопросы, связынные с неправильной и медленной работой этого класса.
Записан
TemaTre
Гость
Re: Парсинг строки адреса
«
Ответ #5 :
Май 10, 2012, 00:33 »
Цитата: alexis031182 от Май 09, 2012, 20:19
http://ru.wikipedia.org/wiki/URL
Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка
Код:
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
не клеится со стандартным видом указанным в википедии, как быть?
Ребят я вот думал парсить при помощи циклов типа сначало разбить на массив строк по ? и потом все что находится после него разбить на строки с разделителем & и потом все их парсить по знаку = но это попахивает жутким быдлокодом чет не хорошо чуть ли не 3 цикла вложеных делать... Может можно как-то регулярными выражениями распарсит? Раз уж про них заговорили.
Записан
alexis031182
Гость
Re: Парсинг строки адреса
«
Ответ #6 :
Май 10, 2012, 00:50 »
Цитата: TemaTre от Май 10, 2012, 00:33
Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка
Код:
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
не клеится со стандартным видом указанным в википедии, как быть?
Ну два правила тогда
Цитата: TemaTre от Май 10, 2012, 00:33
Ребят я вот думал парсить при помощи циклов типа сначало разбить на массив строк по ? и потом все что находится после него разбить на строки с разделителем & и потом все их парсить по знаку = но это попахивает жутким быдлокодом чет не хорошо чуть ли не 3 цикла вложеных делать... Может можно как-то регулярными выражениями распарсит? Раз уж про них заговорили.
QUrl не подходит? Он хорошо урлы разбирает, плюс поддерживает т.н. процентное кодирование
Записан
V1KT0P
Гость
Re: Парсинг строки адреса
«
Ответ #7 :
Май 10, 2012, 02:10 »
Цитата: TemaTre от Май 10, 2012, 00:33
Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка
Код:
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
не клеится со стандартным видом указанным в википедии, как быть?
Как это не клеится? Все там клеится. Вот вид:
Цитировать
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
Вот что требуется разобрать:
Цитировать
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
Получается:
<схема> = http
<логин>:<пароль>@ - не требуется авторизация, поэтому их нету.
<хост> = e.mail.ru
:<порт> - нету, значит стандартный 80.
<URL‐путь> = cgi-bin/msglist
?<параметры> = 667920358=&folder=500000
#<якорь> = msglist
Как видишь все по стандарту.
Записан
sudo
Гость
Re: Парсинг строки адреса
«
Ответ #8 :
Май 10, 2012, 09:42 »
<a href="ссылка"> на сайте ж будет. Теги вытаскивать да и всё
Записан
TemaTre
Гость
Re: Парсинг строки адреса
«
Ответ #9 :
Май 10, 2012, 09:52 »
Цитата: V1KT0P от Май 10, 2012, 02:10
Цитата: TemaTre от Май 10, 2012, 00:33
Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка
Код:
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
не клеится со стандартным видом указанным в википедии, как быть?
Как это не клеится? Все там клеится. Вот вид:
Цитировать
<схема>://<логин>:<пароль>@<хост>:<порт>/<URL‐путь>?<параметры>#<якорь>
Вот что требуется разобрать:
Цитировать
http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000
Получается:
<схема> = http
<логин>:<пароль>@ - не требуется авторизация, поэтому их нету.
<хост> = e.mail.ru
:<порт> - нету, значит стандартный 80.
<URL‐путь> = cgi-bin/msglist
?<параметры> = 667920358=&folder=500000
#<якорь> = msglist
Как видишь все по стандарту.
почему тогда якорь вначале перед вопросом и 667920358=&folder=500000 что тут чему равно? типа аргумент 667920358 равен неизвестно чему и folder равен 500000?
Записан
V1KT0P
Гость
Re: Парсинг строки адреса
«
Ответ #10 :
Май 10, 2012, 09:58 »
Цитата: TemaTre от Май 10, 2012, 09:52
почему тогда якорь вначале перед вопросом и 667920358=&folder=500000 что тут чему равно? типа аргумент 667920358 равен неизвестно чему и folder равен 500000?
Какая разница чему равно, это информация для сервера и что-то утверждать можно посмотрев исходники.
Ты же говорил что тебе только чистые ссылки нужны, ну так и ищи первое вхождение символа "?" или "#" и обрезай до него.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...