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

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Подскажите регулярку. Нужно получить из исходника все внутренние ссылки домена. Домены будут периодически меняться разные.
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113

one

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

Пока решение одно. Делать проверку, абсолютная ссылка или относительная? Если относительная, то подставляем домен. Но как то сложновато, нет? Может что по проще подскажете друзья?
 
  • Спасибо
Реакции: Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
Как то так.
Код:
(?<=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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Так универсальней)) только для абсолютных ссылок
Код:
(?<=href\s?=\s?('|"))https?://?(www\.)?domain.com.*?(?='|")
UPD
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan и one

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
еще есть задача спарcить все внутр. страницы, если адреса не абсолютные, а относительные,
Ну мне в голову лезет только вариант с подстановкой домена с которым работаем. см. выше.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
Ну мне в голову лезет только вариант с подстановкой домена с которым работаем. см. выше.
да, я видел..
ну вот хотелось бы регуляркой все же, опять таки универсальной..
хотел выявить наличие относительных адресов путем детекта, есть base href на странице или нет, но тоже не получится, бывает что нету..
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Универсальная только для относительных ссылок
Код:
(?<=href\s?=\s?('|"))[^:].*?(?='|")
или
Код:
(?<=href\s?=\s?('|"))(?!https?://).*?(?='|")
UPD
 
Последнее редактирование:
  • Спасибо
Реакции: Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
  • Спасибо
Реакции: Dimionix

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Универсальная для всех внутренних ссылок сайта:-)
Код:
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|([^:])).*?(?='|")
или
Код:
(?<=href\s?=\s?('|"))((https?://?(www\.)?domain.com)|(?!https?://)).*?(?='|")
UPD
 
Последнее редактирование:
  • Спасибо
Реакции: one и Sergodjan

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 885
Баллы
113
Универсальная только для относительных ссылок
Код:
(?<=href\s?=\s?'|")[^http].*?(?='|")

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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Так не очень правильно. Эта регулярка не возьмёт ссылки, которые начинаются на h,t,p. К примеру <li><a href="howtopay/">Как платить</a></li>
[^http] отрицает каждый отдельный символ, а не их последовательность.
Верно! Поправил!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
  • Спасибо
Реакции: Sergodjan
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
по последнему апдейту гораздо лучше, но все же встречается мусор..

upload_2017-4-5_16-32-32.png
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
по последнему апдейту гораздо лучше, но все же встречается мусор..

Посмотреть вложение 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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
Если ты о //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

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 114
Баллы
113
а можно сразу результат подбить )))

Подитог:

Код:
(?<=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

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
и потом список очистить с помощью экшена Операции над списком - > Удалить элементы, удовлетв. рег. выражению:
Ну это не готовая регулярка, я просто для примера показал (скопировал из одного своего старого проекта), какая фигня попадается. Перед чисткой нужно будет составить еще регулярку, а если так оставить, то много лишнего удалится.
 
  • Спасибо
Реакции: one
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Подитог:

Код:
(?<=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

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Сейчас буду пробовать. Спасибо всем участвующим! Пока вопрос назрел, вместо domain.com переменную подставить можно?
Да, конечно! Макрос, напр., {-Variable.Domain-}
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

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