![]() |
URL в теле страницы
Есть тело страницы (HTML). Необходимо выделить из него все ссылки (так или иначе доступные пользователю [в том числе, отображаемые в виде картинок], но без учёта всяких интегрируемых объектов типа перехода при клике внутри flash-объекта [от которого в HTML останется лишь уопминание]). Т.к. я не обладаю всем множеством возможных комбинаций для тестов, то спрошу. Верен ли алгоритм:
найти вхождение <a - это будет левая граница. От найденного вхождения до > найти параметр href - его значение = искомый url. Или всё гораздо сложнее? |
Ответ: URL в теле страницы
проще:
PHP код:
|
Ответ: URL в теле страницы
Спасибо, но в реализации твоей многое сокрыто за непонятными мне методами. Нельзя или их более отвлечённо от языка описать?
|
Ответ: URL в теле страницы
PHP код:
PHP код:
|
Ответ: URL в теле страницы
Если таки не в броузере а жабой, то тебе нужно искать открытие тега и закрытие. Чтобы подсветить, будет достаточно в открытии тега <a> до ">" добавить что-то типо:
style="background:#f00 !important" Ссылка будет иметь тогда красный фон. Если таки в броузере, делай примерно как описали. Если предоставишь пример html разметки, можно будет собрать jsfiddle пример. ЗЫ, выкиньте же этот alert нафиг! |
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
Регэкспом его!
|
Ответ: URL в теле страницы
Ну ты же не будешь разрабатывать в IE (в котором он не работает), поэтому использовать его нужно.
Разные броузеры по разному работают с alert'ами, некоторые не дают возможности отключить последующий скрипт, тем самым если ты запустишь такой код на огромной странице, с кучей ссылок, прийдётся зажимать enter или вырубать броузер, врубать снова и резко закрывать закладку (т.к. многие броузеры блокируют любой инпут мобальным окошком alert'а). Разрабатывать нужно в FF + FireBug либо в Chrome. Можно заюзать также Espresso 2 (на маках рулит) для оффлайн разработки, там есть WebKit (как в Chrome) Inspector. |
Ответ: URL в теле страницы
Цитата:
Когда вываливаю в Сеть примеры - меняю на alert. Потому что например даже в FF без установленного FireBug вывод console.log не увидеть. Всем постоянно говорю что Firebug нужно ставить но - как об стенку горох, а потом "а чо ничо не пишет?", надеюсь, ты меня понял. |
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
Цитата:
Windows: Ctrl + Shift + K Чтобы открыть штатный консоль. Он кстати как по мне намного лучше чем FireBug'овский. |
Ответ: URL в теле страницы
Цитата:
Хватит спорить с моими привычками. |
Ответ: URL в теле страницы
Цитата:
<a{блабла}href="{блабла}"{блабла}>{блабла}</a> То есть: Цитата:
|
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
Начало тега всегда одно "<a" далее может быть что угодно кроме ">" вне кавычек (это не просто вычислить). Далее рано или поздно будет (не обязательно кстати) "href=", кавычка может быть двойная за ним, или одинарная. Далее идёт что угодно кроме закрытия кавычки. Потом идёт опять что угодно до ">" вне открытых каких-либо кавычек.
То что между кавычек у href="", является ссылкой на которую будет перенаправление. Далее после ">" может быть что угодно до "</a>". Основываясь W3C, ссылки в ссылке не может быть, и броузеры тоже такое не позволят. Всё что между <a ....> и </a> будет телом ссылки, там может быть картинка (<img />), элементы, или текст. А может быть даже пусто, т.к. можно сделать элемент ссылки блоком и отображать с background'ом - альтернатива img, и лучше по многим факторам. |
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
Атрибута href может и не оказаться у элемента a.
Вообще элемент - это PHP код:
Ещё может быть самозакрывающийся вариант PHP код:
Вообще по сути можно юзать парсер XML для этой цели, но помни, что какие только Васи Пупкины не пишут в Интернете. Поэтому готовься к незакрытым тегам, значениям атрибутов без кавычек и т.д. Именно поэтому я бы советовал использовать (если это возможно) бравузер+javascript+jQuery, т.к. парсер DOM браузера уже готов к таким сюрпризам. Не надо за него изобретать велосипед. Вообще если не секрет какое назначение программы? "На один раз"? Дистрибьюция? |
Ответ: URL в теле страницы
Цитата:
Хотелось бы на потенциальное будущее иметь возможность пропарсить страницу на ссылки, а затем отобрать нужные по маске или регэкспом. Вот. Но, видать, овчинка выделки не стоит. |
Ответ: URL в теле страницы
Если научишься пользоваться JS, то есть такая клёвая штука как Scratchpad в Firefox.
Там можно открыть просто страницу, открыть Scratchpad, и туда вбить какой-то скрипт, и запустить его. Таким образом он будет выполнен, без необходимости менять реальный код страницы, и вообще никто об этом не узнает, и не нужно использовать посторонних инструментов. Данные и результаты можно от туда же выводить в консоль, или вообще кодом создать модальный элемент и туда вставить данные результат твоих махинаций, если таковые имеются. |
Ответ: URL в теле страницы
Можно также и в консоль FireBug'а
|
Ответ: URL в теле страницы
Спасибо, но предполагалось это сделать на цпп без привлечения большого числа инструментов, тем более сторонних приложений.
Ну варианты ясны - спасибо за обзор возможностей. |
Ответ: URL в теле страницы
Кстати да, xml же:
http://www.sourceforge.net/projects/tinyxml |
Ответ: URL в теле страницы
Импер, правой кнопкой в любом месте страницы (я знаю, ты Оператор)
Проинспектировать элемент Справа выбери вкладку "Консоль" Вставляй туда вот это: PHP код:
Всё. Надо ли тебе теперь изобретать велосипед - решай сам. |
Ответ: URL в теле страницы
Привлечение cpp - это уже огромный геморой с точки зрения web'а, когда в броузерах всё есть, просто заюзать нужно.
|
Ответ: URL в теле страницы
да хз. Если есть регулярки том в чём угодно можно отпарсить что угодно. Импэ, ты скажи от начала до конца что ты хочешь сотворить.
Собрать со страницы все href и названия ссылок? тогда: 1) сокетное соединение (загаловки нагуглишь) 2) отрезаешь заголовок ответа ну иконвертишь там в нужную тебе кодировку 3) регуляришь текст |
Ответ: URL в теле страницы
Цитата:
Намного проще воспользоваться node чем cpp. Плюс если нужно будет перекочевать на js на front-end'е, код из node можно будет пере использовать. |
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
node - это не веб лол.
Если взять за пример который ты предложил, как раз node - это ваще проще простого. Тупо парсишь все баннеры и картинки, и через веб-сокет выдаёшь хтмл разметку уже с выдранными данными, не нужно качать картинки (ссылки и так прямые), и куча ещё плюшек. Так что для таких задачь, node в разы круче и удобнее чем C++. Автор топика не сказал о конкретных потребностях, но судя по тому что это "одноразовые" использования, и не публичный софт, то следственно скорее всего автор просто занимается добычей данных с сайтов, для этого node один из первых на данную роль. Следи за тем что творить в последнее время, и вижу у тебя баттхёрты в плане node'а, или то что я что-то предлагаю? |
Ответ: URL в теле страницы
Всем спасибо.
|
Ответ: URL в теле страницы
Цитата:
X: Здравствуйте, меня есть грузовик, как мне правильно перевезти шкаф? Y: Я умею водить троллейбус, так что возьми троллейбус (Автомат и прочие с жикверями) Z: Я умею водить трактор, возьми трактор (Мока с нодой) Нет баттхёрта от ноды. Нода малаца. Просто пойми, я тут тоже мог предложить PHP или Ruby ну или Perl. А можно и линукс поставить с wget`oм и башем. Мог предложить даже WScript. Но всё это не верные пути. Я полагаю, что топик стартеру кроме парса страницы надо будет ещё что либо (например рендер шняги в Xors3D) |
Ответ: URL в теле страницы
Цитата:
Цитата:
Y: Бери BMW ван, и перевози. Z: Бери Node грузовик, он отлично подходит, как раз для твоего груза создан. X: У меня есть трактор. Цитата:
Если ты возьмёшь всё что ты перечислил выше, то подход будет пачти такой же как в C++, немножко может комфортее в Perl'е, но там нужно знать фичи и либы юзать. Я же предложил что создано для таких задачь от части, речь идёт о парсинге веб данных, я предложил инструмент который адаптирован для этого. Не более. Снова повторюсь: топикстартер пометил что юзал для подобного, но не сказал ничего о том что будет именно это юзать, и ничего о том что собирается делать. Следственно все предположения читателей - не имеют отношения к топикстартеру. |
Ответ: URL в теле страницы
Цитата:
Опоздал, Мока уже написал что я хотел. |
Ответ: URL в теле страницы
Ну, раз уж вы строите предположения, то лучшая аналогия:
хх: здравствуйте, научите меня делить столбиком. Правильно ли я делаю: (пример деления двух чисел) yy: бери калькулятор zz: бери MATLAB Часть домыслов отпадает, если обратить внимание на раздел: "Алгоритмика" - подразумевается общее решение (а-ля псевдокод), ну или указание на его титаническую сложность в таком виде. Т.е. задав вопрос о сортировке числе, я ожидаю увидеть что-то вроде описания алгоритма вставок, пузырька, челночной и т.п., а не "юзай функцию super_sort (реализация которой представлена объектным файлом)" или "юзай такой-то табличный процессор". Вот если бы я создал тред в "болтовне" или в одном из форумов "Веб-программирования" - то дело другое. Без претензий, ещё раз спасибо, что уделили время. |
Ответ: URL в теле страницы
impersonalis
это веб детка ! тут могут дать в ps. html5 |
Ответ: URL в теле страницы
Это указано: нужны только "явные" (не знаю, какой терминологически верно) ссылки:
Цитата:
Цитата:
|
Ответ: URL в теле страницы
Цитата:
То что я предложил, на серверной стороне - есть самый оптимальный и минимальный вариант. То что предложил АВТО - это самый нормальный и оптимальный вариант для фронт-енда, если тебе нужно тупо получить результат сразу. А юзать С++ для таких вещей - это полный изврат. Если ты знаешь С++, и не знаешь других инструментов, может всё таки стоит попробовать что-то ещё, более заточенное под конкретную нужду? Плюс, ты спросил вопрос про веб, где 95% решений будет именно в виде javascript'а, т.к. ты не указал если тебе это нужно на backend стороне, следственно для таких задачей самое разумное это JS на фронтенде. Это не алгоритм сортировки. Да даже предложить регулярные выражения тогда по такой логике нельзя - т.к. не во всех языках есть с коробки, и нужны либы. |
Ответ: URL в теле страницы
impersonalis
будь уверен - внутри <a ... href - ссылка, но ! а что вместо ссылки там javascript ?! (это тот который в адресной строке выполнится) :crazy: Where is Your God Now ? :crazy: |
Ответ: URL в теле страницы
2jimon
Цитата:
я понял, и написал выше: Цитата:
зыж нет цпп мои познания не ограничиваются. |
Ответ: URL в теле страницы
Угу, такое бывает.
PHP код:
Также можно сделать <div onclick="..." ... и там в скрипте открывать ссылки тоже. Также есть ajax, где данные не статичны, и тупо получая разметку из исходника - недостаточно, т.к. DOM динамически генерируется скриптом, пример: facebook, twitter, и многие другие. Да и предлагать С++ для таких вещей - это как ассемблер или матлаб для деления в столбик. А node для серверного парсинга html'а - это как раз прямой и самый адекватный вариант для серверной стороны. Либо js для фронтенда (ну тут без вариантов) также самый нормальный и прямой способ. |
Ответ: URL в теле страницы
У меня складывается ощущение, что вы обсуждаете не мою, а свои проблемы.
ОТВЕТ НА МОЙ ВОПРОС (в первом посте): "нет, твой ублюдский алгоритм не учитывает всех тонкостей. Алгоритм, работающий корректно, слишком сложен, чтобы его объяснить тут на пальцах" (мои посты, похоже в приципе не отображаются, и участники обсуждают мысли друг друга). Просьба закрыть тему. |
Ответ: URL в теле страницы
Цитата:
А вообще тому кто так верстает надо дать по щам. |
Ответ: URL в теле страницы
Цитата:
Цитата:
Обрати внимание на круглые скобки. Всё что в них выплюнется в результат. Тобеж для каждого найденного будет: 0) полная строка по шаблону. Например: <a href="http://popka/">ссылка</a> 1)<a href="{текст отсюда}"></a> 2)<a href="">{и текст отсюда}</a> Цитата:
|
Ответ: URL в теле страницы
Цитата:
|
Ответ: URL в теле страницы
Цитата:
А по щщам давать всё равно надо. |
Ответ: URL в теле страницы
Спасибо, что закрыли тему, а не продолжили обсуждать свои взгляды.
|
Часовой пояс GMT +4, время: 12:59. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot