Название: Парсинг строки адреса Отправлено: TemaTre от Май 09, 2012, 20:08 Ребят мне тут дали задание распарсить строки и выявить одинаковые. Задание такое: (в общем пишем тестирующую программу для сайта)
1. Рекурсивно обойти сайт и выловить все ссылки 2. Ссылки вида: http://site/page?first=11&second=22 надо отловить и привести к стандартному виду (ну как мне говорили что значения аргументов не важны) 3. удалить похожие ссылки Проблема в том что я новичек в работе с сайтами. То есть я ХЗ какой вид может принимать строка адреса в браузере, где об этом почитать? Я понимаю, что написать парсер это элементарно (2 вложеных цикла и 2 сплита), но вот где узнать общий вид строки? А то напишу парсер принесу насяльнике, а он ругаться будет. Я понимаю что ГУГЛ рулит, но что-то не получается ничего найти, можете если что тыкнуть носом и посоветовать мне хорошие курсы ГУГЛинга. Название: Re: Парсинг строки адреса Отправлено: alexis031182 от Май 09, 2012, 20:19 http://ru.wikipedia.org/wiki/URL (http://ru.wikipedia.org/wiki/URL)
Название: Re: Парсинг строки адреса Отправлено: crazymonkey от Май 09, 2012, 22:17 Посмотрите в сторону
QNetworkAcess: QNetworkRequest, QNetworkReply Возможно с разбором строки могут возникнуть проблемы. QRegExp иногда не работает как надо; можно в приниципе посмотреть в сторону QRegularExpression https://dangelog.wordpress.com/2012/04/07/qregularexpression/ (https://dangelog.wordpress.com/2012/04/07/qregularexpression/) Название: Re: Парсинг строки адреса Отправлено: V1KT0P от Май 09, 2012, 22:28 QRegExp иногда не работает как надо; Приведи хоть один пример где он работает неправильно. Именно неправильно работает, а не неправильно составленная регулярка.Название: Re: Парсинг строки адреса Отправлено: crazymonkey от Май 09, 2012, 22:40 Я лично никогда не сталкивался с ненормальным поведением этого класса (сложных регулярок не писал).
Совет не использовать QRegExp был дан по двум причинам: 1) Его уберут в Qt 5. 2) Иногда читая форумы по Qt натыкался на вопросы, связынные с неправильной и медленной работой этого класса. Название: Re: Парсинг строки адреса Отправлено: TemaTre от Май 10, 2012, 00:33 http://ru.wikipedia.org/wiki/URL (http://ru.wikipedia.org/wiki/URL) Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка Код: http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000 Ребят я вот думал парсить при помощи циклов типа сначало разбить на массив строк по ? и потом все что находится после него разбить на строки с разделителем & и потом все их парсить по знаку = но это попахивает жутким быдлокодом чет не хорошо чуть ли не 3 цикла вложеных делать... Может можно как-то регулярными выражениями распарсит? Раз уж про них заговорили. Название: Re: Парсинг строки адреса Отправлено: alexis031182 от Май 10, 2012, 00:50 Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка Ну два правила тогдаКод: http://e.mail.ru/cgi-bin/msglist#msglist?667920358=&folder=500000 Ребят я вот думал парсить при помощи циклов типа сначало разбить на массив строк по ? и потом все что находится после него разбить на строки с разделителем & и потом все их парсить по знаку = но это попахивает жутким быдлокодом чет не хорошо чуть ли не 3 цикла вложеных делать... Может можно как-то регулярными выражениями распарсит? Раз уж про них заговорили. QUrl не подходит? Он хорошо урлы разбирает, плюс поддерживает т.н. процентное кодированиеНазвание: Re: Парсинг строки адреса Отправлено: V1KT0P от Май 10, 2012, 02:10 Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка Как это не клеится? Все там клеится. Вот вид:Код: 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 Как видишь все по стандарту. Название: Re: Парсинг строки адреса Отправлено: sudo от Май 10, 2012, 09:42 <a href="ссылка"> на сайте ж будет. Теги вытаскивать да и всё
Название: Re: Парсинг строки адреса Отправлено: TemaTre от Май 10, 2012, 09:52 Я туплю что-то, там все написано красиво, но вот что то скажем вот эта ссылка Как это не клеится? Все там клеится. Вот вид:Код: 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? Название: Re: Парсинг строки адреса Отправлено: V1KT0P от Май 10, 2012, 09:58 почему тогда якорь вначале перед вопросом и 667920358=&folder=500000 что тут чему равно? типа аргумент 667920358 равен неизвестно чему и folder равен 500000? Какая разница чему равно, это информация для сервера и что-то утверждать можно посмотрев исходники.Ты же говорил что тебе только чистые ссылки нужны, ну так и ищи первое вхождение символа "?" или "#" и обрезай до него. |