Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 22.07.2012, 21:36   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
URL в теле страницы

Есть тело страницы (HTML). Необходимо выделить из него все ссылки (так или иначе доступные пользователю [в том числе, отображаемые в виде картинок], но без учёта всяких интегрируемых объектов типа перехода при клике внутри flash-объекта [от которого в HTML останется лишь уопминание]). Т.к. я не обладаю всем множеством возможных комбинаций для тестов, то спрошу. Верен ли алгоритм:
найти вхождение <a - это будет левая граница.
От найденного вхождения до > найти параметр href - его значение = искомый url.
Или всё гораздо сложнее?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 17:59   #2
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: URL в теле страницы

проще:
<script>
var 
obj=document.body.getElementsByTag("a");
for(var 
i=0;i<obj.length;i++)
           
alert(obj[i].getAttribute('href'));
</script> 
инклудим в страницу и все ссылки алертом
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (23.07.2012)
Старый 23.07.2012, 21:00   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: URL в теле страницы

Спасибо, но в реализации твоей многое сокрыто за непонятными мне методами. Нельзя или их более отвлечённо от языка описать?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 21:06   #4
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: URL в теле страницы

<script>
var 
obj=document.body.getElementsByTag("a"); // из body страницы берутся все элементы "a"
for(var i=0;i<obj.length;i++) // Перебор их
           
alert(obj[i].getAttribute('href')); // Алертим атрибут href
</script> 
Правда я не уверен что Имперу годится жабаскриптовая реализация (правда если у Ипмера нет веских причин делать свой парсер лучше воспользоваться услугами браузера). А ещё я бы советовал юзать jQuery:
<script>
var 
links = $('a');
for(var 
i=0;i<links.length;i++){alert($(links[i]).attr('href'))}
</script> 
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (23.07.2012)
Старый 23.07.2012, 21:12   #5
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: URL в теле страницы

Если таки не в броузере а жабой, то тебе нужно искать открытие тега и закрытие. Чтобы подсветить, будет достаточно в открытии тега <a> до ">" добавить что-то типо:
style="background:#f00 !important"
Ссылка будет иметь тогда красный фон.
Если таки в броузере, делай примерно как описали. Если предоставишь пример html разметки, можно будет собрать jsfiddle пример.

ЗЫ, выкиньте же этот alert нафиг!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (23.07.2012)
Старый 23.07.2012, 21:17   #6
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: URL в теле страницы

Сообщение от MoKa Посмотреть сообщение
Если таки не в броузере а жабой, то тебе нужно искать открытие тега и закрытие. Чтобы подсветить, будет достаточно в открытии тега <a> до ">" добавить что-то типо:
style="background:#f00 !important"
Ссылка будет иметь тогда красный фон.
Если таки в броузере, делай примерно как описали. Если предоставишь пример html разметки, можно будет собрать jsfiddle пример.

ЗЫ, выкиньте же этот alert нафиг!
Не во всех браузерах работает console.log
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 21:38   #7
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: URL в теле страницы

Регэкспом его!
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
impersonalis (23.07.2012), Randomize (23.07.2012)
Старый 23.07.2012, 21:51   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: URL в теле страницы

Ну ты же не будешь разрабатывать в IE (в котором он не работает), поэтому использовать его нужно.

Разные броузеры по разному работают с alert'ами, некоторые не дают возможности отключить последующий скрипт, тем самым если ты запустишь такой код на огромной странице, с кучей ссылок, прийдётся зажимать enter или вырубать броузер, врубать снова и резко закрывать закладку (т.к. многие броузеры блокируют любой инпут мобальным окошком alert'а).

Разрабатывать нужно в FF + FireBug либо в Chrome. Можно заюзать также Espresso 2 (на маках рулит) для оффлайн разработки, там есть WebKit (как в Chrome) Inspector.
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 21:57   #9
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: URL в теле страницы

Сообщение от MoKa Посмотреть сообщение
Ну ты же не будешь разрабатывать в IE (в котором он не работает), поэтому использовать его нужно.

Разные броузеры по разному работают с alert'ами, некоторые не дают возможности отключить последующий скрипт, тем самым если ты запустишь такой код на огромной странице, с кучей ссылок, прийдётся зажимать enter или вырубать броузер, врубать снова и резко закрывать закладку (т.к. многие броузеры блокируют любой инпут мобальным окошком alert'а).

Разрабатывать нужно в FF + FireBug либо в Chrome. Можно заюзать также Espresso 2 (на маках рулит) для оффлайн разработки, там есть WebKit (как в Chrome) Inspector.
Я в курсе. Для себя я использую console.log.
Когда вываливаю в Сеть примеры - меняю на alert.
Потому что например даже в FF без установленного FireBug вывод console.log не увидеть.
Всем постоянно говорю что Firebug нужно ставить но - как об стенку горох, а потом "а чо ничо не пишет?", надеюсь, ты меня понял.
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 22:04   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: URL в теле страницы

Сообщение от SBJoker Посмотреть сообщение
Регэкспом его!
Вариант конечно: нарезать по разделителям (пробелы, скобки <> и проч) страницу и прогнать элементы. Но мне казалось, что это более "в лоб". Думал регэксп использовать чтоб забраковать href-ы содержащие ссылки, получаемые в результате выполнения скрипта (т.е. не содержащие ссылки в явном виде).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 22:22   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: URL в теле страницы

Сообщение от ABTOMAT Посмотреть сообщение
Потому что например даже в FF без установленного FireBug вывод console.log не увидеть.
Всем постоянно говорю что Firebug нужно ставить но - как об стенку горох, а потом "а чо ничо не пишет?", надеюсь, ты меня понял.
MacOS X: Cmnd + Alt + K
Windows: Ctrl + Shift + K
Чтобы открыть штатный консоль. Он кстати как по мне намного лучше чем FireBug'овский.
(Offline)
 
Ответить с цитированием
Старый 23.07.2012, 22:35   #12
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: URL в теле страницы

Сообщение от MoKa Посмотреть сообщение
MacOS X: Cmnd + Alt + K
Windows: Ctrl + Shift + K
Чтобы открыть штатный консоль. Он кстати как по мне намного лучше чем FireBug'овский.
Так было не всегда.
Хватит спорить с моими привычками.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
moka (23.07.2012)
Старый 23.07.2012, 23:59   #13
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: URL в теле страницы

Сообщение от impersonalis Посмотреть сообщение
Вариант конечно: нарезать по разделителям (пробелы, скобки <> и проч) страницу и прогнать элементы. Но мне казалось, что это более "в лоб". Думал регэксп использовать чтоб забраковать href-ы содержащие ссылки, получаемые в результате выполнения скрипта (т.е. не содержащие ссылки в явном виде).
Фактически ссылки это:

<a{блабла}href="{блабла}"{блабла}>{блабла}</a>

То есть:
#<a\s[^>]*href=\"([^\"]*)\"[^>]*>(.*)<\/a>#siU
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
impersonalis (24.07.2012), SBJoker (24.07.2012)
Старый 24.07.2012, 10:55   #14
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: URL в теле страницы

Сообщение от Randomize Посмотреть сообщение
Фактически ссылки это:

<a{блабла}href="{блабла}"{блабла}>{блабла}</a>

То есть:
Если я применю этот регэксп целиком к телу, то получу просто false, не так ли? На что опираться выбирая разделители для нарезки тела на потенциальные ссылки?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 24.07.2012, 13:50   #15
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: URL в теле страницы

Начало тега всегда одно "<a" далее может быть что угодно кроме ">" вне кавычек (это не просто вычислить). Далее рано или поздно будет (не обязательно кстати) "href=", кавычка может быть двойная за ним, или одинарная. Далее идёт что угодно кроме закрытия кавычки. Потом идёт опять что угодно до ">" вне открытых каких-либо кавычек.
То что между кавычек у href="", является ссылкой на которую будет перенаправление.
Далее после ">" может быть что угодно до "</a>". Основываясь W3C, ссылки в ссылке не может быть, и броузеры тоже такое не позволят.
Всё что между <a ....> и </a> будет телом ссылки, там может быть картинка (<img />), элементы, или текст. А может быть даже пусто, т.к. можно сделать элемент ссылки блоком и отображать с background'ом - альтернатива img, и лучше по многим факторам.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (24.07.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 19:18.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com