Поскажите регулярку для получения внутренних страниц сайта.

  • Автор темы Автор темы one
  • Дата начала Дата начала

one

Client
Регистрация
22.09.2015
Сообщения
7 019
Реакции
1 314
Баллы
113
Подскажите регулярку. Нужно получить из исходника все внутренние ссылки домена. Домены будут периодически меняться разные.
 
Не получилось реализовать задуманное. Не на всех сайтах в коде страницы абсолютные ссылки присутствуют, есть где и относительные. Может кто подскажет реализацию получения всех внутренних ссылок со страницы?

Пока решение одно. Делать проверку, абсолютная ссылка или относительная? Если относительная, то подставляем домен. Но как то сложновато, нет? Может что по проще подскажете друзья?
 
  • Оценить
Реакции: Sergodjan
Как то так.
Код:
Развернуть Свернуть Копировать
(?<=href=")(domen.com|/)\S*(?=")
спасибо, как раз нужна была универсальная регулярка, я немного модернизировал ее под свои нужды,
может еще кому то пригодится, кроме меня..

Код:
Развернуть Свернуть Копировать
регулярка:
(?<=href='|")((http://|https://)(www\.|)domen.com|/)\S*(?='|")

Код:
Развернуть Свернуть Копировать
т.е. из этого
<a href='https://www.domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew.html'>wewerer</a>
<a href="http://domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew.html">wewerer</a>
<a href='https://www.domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew/'>wewerer</a>
<a href="http://domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew/">wewerer</a>

берет вот это
https://www.domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew.html
http://domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew.html
https://www.domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew/
http://domen.com/23342rdfdf/2323ddsd/2343sdsfd/wqew/

еще есть задача спарcить все внутр. страницы, если адреса не абсолютные, а относительные,
например:

Код:
Развернуть Свернуть Копировать
<a href="news/asdf/qwerty/">анкор</a>
или
<a href="/news/asdf/qwerty/">анкор</a>

пока не могу придумать как.. :ah:
 
Последнее редактирование:
  • Оценить
Реакции: one
Так универсальней)) только для абсолютных ссылок
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))https?://?(www\.)?domain.com.*?(?='|")

UPD
 
Последнее редактирование:
  • Оценить
Реакции: Sergodjan и one
еще есть задача спарcить все внутр. страницы, если адреса не абсолютные, а относительные,
Ну мне в голову лезет только вариант с подстановкой домена с которым работаем. см. выше.
 
Ну мне в голову лезет только вариант с подстановкой домена с которым работаем. см. выше.
да, я видел..
ну вот хотелось бы регуляркой все же, опять таки универсальной..
хотел выявить наличие относительных адресов путем детекта, есть base href на странице или нет, но тоже не получится, бывает что нету..
 
Универсальная только для относительных ссылок
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))[^:].*?(?='|")
или
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))(?!https?://).*?(?='|")

UPD
 
Последнее редактирование:
  • Оценить
Реакции: Sergodjan
Универсальная только для относительных ссылок
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?'|")[^http].*?(?='|")
работает, огромное спасибо!
взял в свою копилку.. :)
 
  • Оценить
Реакции: Dimionix
Универсальная для всех внутренних ссылок сайта:-)
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|([^:])).*?(?='|")
или
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|(?!https?://)).*?(?='|")

UPD
 
Последнее редактирование:
  • Оценить
Реакции: one и Sergodjan
Универсальная для всех внутренних ссылок сайта:-)
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?'|")((https?://?(www\.)?domain.com)|([^http])).*?(?='|")
вообще шикарно! :dm: ты волшебник.. :bp:
 
Универсальная только для относительных ссылок
Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?'|")[^http].*?(?='|")


Так не очень правильно. Эта регулярка не возьмёт ссылки, которые начинаются на h,t,p. К примеру <li><a href="howtopay/">Как платить</a></li>
[^http] отрицает каждый отдельный символ, а не их последовательность.
 
  • Оценить
Реакции: Dimionix
Так не очень правильно. Эта регулярка не возьмёт ссылки, которые начинаются на h,t,p. К примеру <li><a href="howtopay/">Как платить</a></li>
[^http] отрицает каждый отдельный символ, а не их последовательность.
Верно! Поправил!
 
  • Оценить
Реакции: Sergodjan
по последнему апдейту гораздо лучше, но все же встречается мусор..

upload_2017-4-5_16-32-32.png
 
по последнему апдейту гораздо лучше, но все же встречается мусор..

Посмотреть вложение 19727
Если ты о //www.liveinternet.ru/click, то это скорее исключение. От таких может лучше избавляться чисткой после парсинга. Как и от mailto:, tel:, javascript:, ссылок на стили, скрипты, картинки, языки и т.п.
Некоторая хрень =>
Код:
Развернуть Свернуть Копировать
\.ico|\.jpg|\.jpeg|\.png|\.gif|\.css|\.less|\.js|\.jsp|\.pdf|\.rss|\.aspx|\.cfm|\.ashx|mailto:|tel:|javascript:|\#|//|regist|language|login|email|admin|captcha|sign_in|feed|redirect|wp-|/cn/|/tw/|/kr/|/jp/|/tr/|/ar/
 
  • Оценить
Реакции: one, redman и Sergodjan
Если ты о //www.liveinternet.ru/click, то это скорее исключение. От таких может лучше избавляться чисткой после парсинга. Как и от mailto:, tel:, javascript:, ссылок на стили, скрипты, картинки, языки и т.п.
Некоторая хрень =>
Код:
Развернуть Свернуть Копировать
\.ico|\.jpg|\.jpeg|\.png|\.gif|\.css|\.less|\.js|\.jsp|\.pdf|\.rss|\.aspx|\.cfm|\.ashx|mailto:|tel:|javascript:|\#|//|regist|language|login|email|admin|captcha|sign_in|feed|redirect|wp-|/cn/|/tw/|/kr/|/jp/|/tr/|/ar/
ага, именно это..
еще раз огромное спасибо..
 
  • Оценить
Реакции: one
а можно сразу результат подбить )))


Подитог:

Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|([^:])).*?(?='|")
или
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|(?!https?://)).*?(?='|")
(последняя самая лучшая на мой взгляд)


и потом список очистить с помощью экшена Операции над списком - > Удалить элементы, удовлетв. рег. выражению:
(если удаляется лишнее, то подредактировать под себя)

Код:
Развернуть Свернуть Копировать
\.xml\.|xmlrpc|\.ico|\.jpg|\.jpeg|\.png|\.gif|\.css|\.less|\.js|\.jsp|\.pdf|\.rss|\.aspx|\.cfm|\.ashx|mailto:|tel:|javascript:|\#|//|regist|language|login|email|admin|captcha|sign_in|feed|redirect|wp-|/cn/|/tw/|/kr/|/jp/|/tr/|/ar/


еще раз огромное спасибо автору Dimionix за эти решения!
 
Последнее редактирование:
и потом список очистить с помощью экшена Операции над списком - > Удалить элементы, удовлетв. рег. выражению:
Ну это не готовая регулярка, я просто для примера показал (скопировал из одного своего старого проекта), какая фигня попадается. Перед чисткой нужно будет составить еще регулярку, а если так оставить, то много лишнего удалится.
 
  • Оценить
Реакции: one
Подитог:

Код:
Развернуть Свернуть Копировать
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|([^:])).*?(?='|")
или
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|(?!https?://)).*?(?='|")
(последняя самая лучшая на мой взгляд)

и потом список очистить с помощью экшена Операции над списком - > Удалить элементы, удовлетв. рег. выражению:

Код:
Развернуть Свернуть Копировать
xml\.|xmlrpc|\.ico|\.jpg|\.jpeg|\.png|\.gif|\.css|\.less|\.js|\.jsp|\.pdf|\.rss|\.aspx|\.cfm|\.ashx|mailto:|tel:|javascript:|\#|//|regist|language|login|email|admin|captcha|sign_in|feed|redirect|wp-|/cn/|/tw/|/kr/|/jp/|/tr/|/ar/


еще раз огромное спасибо автору Dimionix за эти решения!
спс други!
главное чтобы @ Dimionix снова не сделал это

Сделал очередной апдейт))
)))
 
  • Оценить
Реакции: Dimionix
Сейчас буду пробовать. Спасибо всем участвующим! Пока вопрос назрел, вместо domain.com переменную подставить можно?
Да, конечно! Макрос, напр., {-Variable.Domain-}
 
  • Оценить
Реакции: one

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)