граббер ссылок

Тема в разделе "Регулярные выражения", создана пользователем TrastMan, 30 мар 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. TrastMan

    TrastMan Постоялец

    Регистр.:
    13 ноя 2007
    Сообщения:
    117
    Симпатии:
    4
    Сграбить все ссылки со странички в массив типа:
    Код:
    хттп://ссылка1
    хттп://ссылка2
    ...
    хттп://ссылкаN
    , включая сложные с дополнительными параметрами и хешами. Исключить mailto:, javascript:, и выбранные наборы символов.
    Чет не выходит, все найденные примеры не рабочие...
     
  2. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    если в общем виде то так(неизвестно какие кавычки)
    если же известно какие кавычки или с чего начинается ссылка или нужна только та что начинается с http
    тогда так например
     
    TrastMan нравится это.
  3. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Вот моя рабочая регулярка:
    PHP:
    preg_match_all('#(<a[^<>]*href=[\'"].*[\'"][^<>]*>.*</a>)#iU'$in$out);
    Внимание важный нюанс! У меня все что прогоняется через специализированные функции, а эта регулярка как раз используется в специализированной функции. С начало преобразовывается в одну строку и удаляются дубль пробелы.

    Та к что если теги ссылок будут растянуты более чем на одну строчку принудительно символом переноса строки, то к регулярки необходимо прикрутить модификатор "m", на работоспособность в этом случаи не проверялось, но я думаю работать должно.
     
    TrastMan нравится это.
  4. xakkap

    xakkap Писатель

    Регистр.:
    19 мар 2010
    Сообщения:
    9
    Симпатии:
    2
    Можно использовать уже готовые решения, например можно воспользоваться PHP Simple HTML DOM Parser

    http://parsing-and-i.blogspot.com/2010/05/php-simple-html-dom-parser.html

    Тут рассматривается его работа и в том числе Ваш вопрос насчет парсинга ссылок.
    Работает довольно быстро.
     
  5. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Зачем использовать PHP Simple бла-бла-бла, если я выше регулярку выложил для выдергивания ссылок. И которая кстати будет работать в разы быстрее.

    И кстати говоря внешнюю ссылочку под хайд положи, а то неминуемо горчичник схватишь.
     
  6. AXP

    AXP Создатель

    Регистр.:
    16 мар 2007
    Сообщения:
    27
    Симпатии:
    2
    можно грабить ссылки и без привязки к a href (так как они могут быть и по-другому указаны. к примеру, просто в тексте или в ява-скрипте.
    PHP:
    if (preg_match_all('#(https{0,1}:\/\/[a-z\d\-\.\/]+)#i'$body$matches))
        
    var_dump($matches[1]);
     
Статус темы:
Закрыта.