все страницы сайта

desided

Client
Joined
Oct 19, 2015
Messages
120
Reaction score
11
Points
18
добрый день. накиньте советов как реализовать парсер всех страниц сайта если у него нету сайтмапа, страницы в индексе поисковиков - тоже не поможет.
 

zortexx

Client
Joined
Sep 19, 2011
Messages
2,520
Reaction score
1,223
Points
113
Парсите с входной страницы (например с домена) все ссылки в список (массив), переходите по всем ссылкам и добавляйте в список найденные на других страницах ссылки в тот же список.

Для посещенных страниц создайте отдельный список и сверяйтесь по нему - все ли ссылки посетили.
 

doc

Client
Joined
Mar 30, 2012
Messages
8,613
Reaction score
4,601
Points
113
Для посещенных страниц создайте отдельный список и сверяйтесь по нему - все ли ссылки посетили.
Можно просто удалять дубли. При условии, конечно, что дубли удаляются с конца списка, а не с начала
 

zortexx

Client
Joined
Sep 19, 2011
Messages
2,520
Reaction score
1,223
Points
113
Можно просто удалять дубли. При условии, конечно, что дубли удаляются с конца списка, а не с начала
Не имеет смысла, поскольку порождает кучу лишних телодвижений.
 

doc

Client
Joined
Mar 30, 2012
Messages
8,613
Reaction score
4,601
Points
113
Не имеет смысла, поскольку порождает кучу лишних телодвижений.
т.е. сверятся после парсинга - это не лишние телодвижения, а удалять дубли - лишние. интересно)
 

zortexx

Client
Joined
Sep 19, 2011
Messages
2,520
Reaction score
1,223
Points
113
т.е. сверятся после парсинга - это не лишние телодвижения, а удалять дубли - лишние. интересно)
Для начала покажите ваш вариант алгоритма "с удалением дублей из конца списка".

Мой без детализации выглядит примерно так:
upload_2016-1-22_15-7-33.png
 

doc

Client
Joined
Mar 30, 2012
Messages
8,613
Reaction score
4,601
Points
113
Оно то на то и выходит. Парсим ссылки, добавляем в список, удаляем дубли, отрабатываем список.
Просто этот вариант будет работать только при условии, что в стандартном методе удаления дублей со списка удаление идет с конца.
Т.е. если мы имеем список "1,2,3,1" нужно, чтобы при удаление дублей остался список "1,2,3". Я никогда не вникал, как оно работает.
Такой вариант заменит одной строкой цикл проверки
 

Lexicon

Client
Joined
Dec 27, 2012
Messages
1,775
Reaction score
891
Points
113
Скачайте себе xenu или там Netpeak Spider быстро и просто позволят решить вопрос)
 

zena2015

Client
Joined
Jul 10, 2015
Messages
44
Reaction score
8
Points
8
ИМХО задача обойти все страницы сайта средствами ZP часто схоже на забивание гвоздей микроскопом.

Но вроде алгоритм простой:
Чтобы не запутаться ведем несколько списков:
1- адреса спарсенные с текущей страницы
2- адреса с посещенными (читай пропарсенными) страницами
3- запланированные на парсинг

Дальше все логично и по порядку:
1 Собрали локальные адреса с текущей страницы в первый список.
2 Прошлись по первому списку перебрав адреса: взяли адрес с 1 списка, проверили на наличие его во втором списке, если есть - удаляем берем следующий, если нет - добавляем его в третий список и переходим к новой строке.
3 Закончив перебор строк первого списка, чистим от дублей третий, на случай если мы добавили туда то что там уже было.
4(0) берем (естественно с удалением) новый адрес с третьего списка, переходим по нему и добавляем этот адрес во второй список .

Кстати, очень не хватает в стандартных функциях ZP Операции над списком
такого простого пункта как "найти в списке", приходится через C#
 
  • Thank you
Reactions: desided

doc

Client
Joined
Mar 30, 2012
Messages
8,613
Reaction score
4,601
Points
113
ИМХО задача обойти все страницы сайта средствами ZP часто схоже на забивание гвоздей микроскопом.

Но вроде алгоритм простой:
Чтобы не запутаться ведем несколько списков:
1- адреса спарсенные с текущей страницы
2- адреса с посещенными (читай пропарсенными) страницами
3- запланированные на парсинг

Дальше все логично и по порядку:
1 Собрали локальные адреса с текущей страницы в первый список.
2 Прошлись по первому списку перебрав адреса: взяли адрес с 1 списка, проверили на наличие его во втором списке, если есть - удаляем берем следующий, если нет - добавляем его в третий список и переходим к новой строке.
3 Закончив перебор строк первого списка, чистим от дублей третий, на случай если мы добавили туда то что там уже было.
4(0) берем (естественно с удалением) новый адрес с третьего списка, переходим по нему и добавляем этот адрес во второй список .

Кстати, очень не хватает в стандартных функциях ZP Операции над списком
такого простого пункта как "найти в списке", приходится через C#
это всё делается одним списком)
 
  • Thank you
Reactions: Dimionix

zortexx

Client
Joined
Sep 19, 2011
Messages
2,520
Reaction score
1,223
Points
113
это всё делается одним списком)
Можете расписать как вы это собираетесь делать одним списком?
Полагаю не только ТС будет рад изучить пример реализации вашего варианта с одним списком в шаблоне.
 

Dimionix

Moderator
Joined
Apr 9, 2011
Messages
3,068
Reaction score
3,106
Points
113
Можете расписать как вы это собираетесь делать одним списком?
Полагаю не только ТС будет рад изучить пример реализации вашего варианта с одним списком в шаблоне.
С одним списком норм вариант. Берем из списка по счетчику > парсим в этот же список > удаляем дубли > опять берем по счетчику. Как только взять будет нечего (ошибка - индекс за пределами диапазона) = профит.
 
  • Thank you
Reactions: j2082192 and doc

doc

Client
Joined
Mar 30, 2012
Messages
8,613
Reaction score
4,601
Points
113
С одним списком норм вариант. Берем из списка по счетчику > парсим в этот же список > удаляем дубли > опять берем по счетчику. Как только взять будет нечего (ошибка - индекс за пределами диапазона) = профит.
именно)
 

zena2015

Client
Joined
Jul 10, 2015
Messages
44
Reaction score
8
Points
8
:bw:Ну если дубли удаляются с конца списка, то соглашусь, что такой вариант выглядит гораздо проще. :ay:
Но на практике, все же, парсить сразу в один список не стал бы.
 

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)