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

desided

Client
Регистрация
19.10.2015
Сообщения
120
Благодарностей
11
Баллы
18
добрый день. накиньте советов как реализовать парсер всех страниц сайта если у него нету сайтмапа, страницы в индексе поисковиков - тоже не поможет.
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
Парсите с входной страницы (например с домена) все ссылки в список (массив), переходите по всем ссылкам и добавляйте в список найденные на других страницах ссылки в тот же список.

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Для посещенных страниц создайте отдельный список и сверяйтесь по нему - все ли ссылки посетили.
Можно просто удалять дубли. При условии, конечно, что дубли удаляются с конца списка, а не с начала
 

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
Можно просто удалять дубли. При условии, конечно, что дубли удаляются с конца списка, а не с начала
Не имеет смысла, поскольку порождает кучу лишних телодвижений.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Не имеет смысла, поскольку порождает кучу лишних телодвижений.
т.е. сверятся после парсинга - это не лишние телодвижения, а удалять дубли - лишние. интересно)
 

minsky

Client
Регистрация
18.08.2013
Сообщения
108
Благодарностей
28
Баллы
28

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
т.е. сверятся после парсинга - это не лишние телодвижения, а удалять дубли - лишние. интересно)
Для начала покажите ваш вариант алгоритма "с удалением дублей из конца списка".

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Оно то на то и выходит. Парсим ссылки, добавляем в список, удаляем дубли, отрабатываем список.
Просто этот вариант будет работать только при условии, что в стандартном методе удаления дублей со списка удаление идет с конца.
Т.е. если мы имеем список "1,2,3,1" нужно, чтобы при удаление дублей остался список "1,2,3". Я никогда не вникал, как оно работает.
Такой вариант заменит одной строкой цикл проверки
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Скачайте себе xenu или там Netpeak Spider быстро и просто позволят решить вопрос)
 

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
ИМХО задача обойти все страницы сайта средствами ZP часто схоже на забивание гвоздей микроскопом.

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

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

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

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
ИМХО задача обойти все страницы сайта средствами ZP часто схоже на забивание гвоздей микроскопом.

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

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

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

zortexx

Client
Регистрация
19.09.2011
Сообщения
2 520
Благодарностей
1 226
Баллы
113
это всё делается одним списком)
Можете расписать как вы это собираетесь делать одним списком?
Полагаю не только ТС будет рад изучить пример реализации вашего варианта с одним списком в шаблоне.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Можете расписать как вы это собираетесь делать одним списком?
Полагаю не только ТС будет рад изучить пример реализации вашего варианта с одним списком в шаблоне.
С одним списком норм вариант. Берем из списка по счетчику > парсим в этот же список > удаляем дубли > опять берем по счетчику. Как только взять будет нечего (ошибка - индекс за пределами диапазона) = профит.
 
  • Спасибо
Реакции: j2082192 и doc

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
С одним списком норм вариант. Берем из списка по счетчику > парсим в этот же список > удаляем дубли > опять берем по счетчику. Как только взять будет нечего (ошибка - индекс за пределами диапазона) = профит.
именно)
 

zena2015

Client
Регистрация
10.07.2015
Сообщения
44
Благодарностей
8
Баллы
8
:bw:Ну если дубли удаляются с конца списка, то соглашусь, что такой вариант выглядит гораздо проще. :ay:
Но на практике, все же, парсить сразу в один список не стал бы.
 

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