Как создать такой парсер?

D
На сайте с 14.01.2007
Offline
153
#21

rammlied, ага, сделайте сначала карту сайта. например: www.123people.com . посмотрите site в google

BlueRay
На сайте с 09.03.2011
Offline
38
#22

rammlied, это нерационально: в этом случае придётся дваждый пройтись по всему сайту (во время составление карты сайта и когда надо будет найти нужные страницы). Вариант сохранять все страницы во время составления карты тоже уныл. Необходимо составлять карту сайта и проверять скачанные страницы одновременно.

Общий алгоритм примерно таков:

1) загружаем страницу.

2) извлекаем все внутренние ссылки (как это сделать - дело вкуса)

3) добавляем эти ссылки в очередь на загрузку

4) загруженную страницу передаём нашему обработчику, который проверить что нужно и если что занесёт в базу некие "сведения".

Всё это делать необходимо асинхронно; естественно необходимо параллельно вести список всех уже загруженных и поставленных в очередь на загрузку страниц, а перед добавлением найденной ссылки в очередь проверять, не скачана или не поставлена в очередь такая же страница.

p.s. с php не работаю и не работал, как и с помощью каких инструментов это реализовать - не подскажу.

Пишу десктопные и web приложения на C# (ASP.NET MVC) :-) Хотите сказать спасибо или обозвать дураком? Для этого есть репутация, не надо флудить.
DV
На сайте с 01.05.2010
Offline
644
#23

Хоть ТС и сказал мне не помогать далее, разовью идею с сайтмэпом.

Ищём готовый скрипт генерации карты, в цикл вставляем вызов функции парсера. Всё.

Ну а отдельно стоящий парсер просто делается.

Создаём двухмерный массив. В первой колонке URL, во второй статус.

Извлекаем ссылки с текущей страницы, добавляем в массив.

Каждый раз перетряхиваем его на предмет дубликатов.

Далее идём по ссылкам из массива.

После загрузки каждой страницы ставим статус "ОК".

Тем не менее, так и не понял, что нужно изначально — алгоритмы или их реализацию? ТС вроде как дружит и с тем, и с другим. Просто поговорить?

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
C
На сайте с 04.02.2005
Offline
291
#24

1.Сканирование страницы и сбор ссылок с укладыванием в массив

2.Уникализация массива

4. Проверка на наличие непосещенной страницы для выхода из цикла.

3.Проход по ссылкам из массива, с пометкой о посещении, возврат на п.1

Минус- неоптимально

Плюс - простота решения

возможен вариант, когда на первой странице нет ссылок.

ВитальБосс
На сайте с 11.12.2010
Offline
34
#25

Делаем также как sape индексирует сайты:

сначала парсим ссылки на главной странице - заносим их в отдельный файл, называем его url1.txt

когда ссылки с главной спарсились, начинаем парсить все ссылки как раз из файла - url2.txt, то есть третий уровень,

при этом когда ссылки спарсились скрипт проверяет на уникальность строк, чтобы удалить все дубли - создайте такую функцию отдельно.

Ссылки в файле url2.txt - это и есть вся карта сайта

Если хотите парсить глубже, что не оч советую (будет долго), тогда парсите все ссылки с url2.txt в url3.txt и так далее.

Использовать БД - это извращение ИМХО

DV
На сайте с 01.05.2010
Offline
644
#26

Там всё в оперативе можно держать…

Busgame
На сайте с 10.07.2011
Offline
24
#27

Да, решений много конечно, но вас немного не туда понесло, хотя всех благодарю еще раз, за отзывчивость. Сайт, с которого будет происходить парсинг постоянно обновляется. Поэтому формирования единого сайтмапа не рационально. Парсинг будет бесконечным. Т.е. по сути дела, нужен небольшой бот - индексатор. Но при индексировании он не должен запоминать ключевых слов и урлы к этим ключам, как у поисковых систем. А всего навсего:

Проверка страницы - занесение фрагмента этой страницы в индекс - отображение пользователю.

Недавно вот прочел (тут), что реализовывать такую идею на php не стоит. Все ядро советуют делать на C, а веб-интерфейс на php.

Хотелось бы еще спросить, на чем написаны индексаторы Яндекса и Гугла. Возможно, выберу именно их язык, ведь он уже проверен. Основная задача будущего парсера - гулять по страницам, сравнивать, заносить в бд. Парсер должен быть сравнительно быстрым (заносить примерно 50 - 100 страниц в день). 100 страниц в день - не так уж много, но вы не забывайте что это число для занесения в бд, проверятся всего будет примерно около 2000 - 4000 страниц в день.

С удовольствием выслушаю ваши предположения и мысли. Еще раз спасибо за помощь.

P.S.: числа выше - стартовые, со временем они увеличатся.

D
На сайте с 14.01.2007
Offline
153
#28

делайте на том языке программирования, который знаете.

10000 страниц в день это вообще ни о чём, справится любой язык

C
На сайте с 04.02.2005
Offline
291
#29
Основная задача будущего парсера - гулять по страницам, сравнивать, заносить в бд. Парсер должен быть сравнительно быстрым (заносить примерно 50 - 100 страниц в день).

Это не скорость - это черепаха.

в бд, проверятся всего будет примерно около 2000 - 4000 страниц в день.

Это не объем.

загрузив скриптом страницу =- вы загружаете всего лишь одну страницу без каких-либо других элементов (стили, изображения, скрипты)

Отпарсив одну страницу и собрав ссылки - вы сканируете на наличие только одной страницы. И...

Так что смело укладывайте ссылки в базу, помечайте их"проиндексированными" и каждый день запускайте свой парсер.

Язык парсера - безразличен.

Busgame
На сайте с 10.07.2011
Offline
24
#30

Парсер должен работать без выключения и всегда выполнять свою работу, еще раз подчеркну, сайт постоянно обновляется, следовательно и парсер должен работать постоянно. В принципе, если php для такого количества подходит, то буду использовать его. Правда ума не приложу как эти курлы заставить по ссылкам переходить.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий