Как лучше сделать парсер данных с разных источников?

Работаю над парсером сейчас, нужен совет как лучше сделать.
Сейчас делаю так.

Парсер делится на 3 части:
spider;
checker;
html page parser;


Структура БД:
таблица SITES с сайтами донорами;
таблица URLS с id сайта, ссылка, статус;
таблица DATA с данными (id сайта, ссылка, тайтл, контент);


Как планирую реализовать работу:
Спайдером иду на сайты доноров собираю ссылки, записываю в базу URLS ставлю статус не проиндексировано;
Чекером проверяю таблицу URLS по статусу, передаю ссылки по которым нужно парсить html page parser'y;
Html page parser'ом иду по ссылкам получаю контент, проверяю на валидность, проверяю на дубликаты в таблице DATA, записываю контент в таблицу DATA если всё ок, меняю статус в таблице URLS.

Спайдер и чекер думаю поставить на крон. Html page parser под каждый донор разный. Если чекер по статусу находит не проиндексированную ссылку, он смотрит какому сайту она принадлежит и запускает соответствующий Html page parser.

Как такой вариант ? С парсерами не работал, так что хз как лучше.
  • Вопрос задан
  • 1003 просмотра
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
В вашей схеме еще не хватает подсистемы scheduler - планировщик заданий.
Его нужно чаще всего запускать по крону (а может он у вас будет вертеться в бесконечном цикле, а может спать в потоковом режиме выполнения).
Планировщик, на основе результатов проходов паука, парсера, ограничений на проходимых сайтах, нагрузки собственной системы, будет регулировать частоту запуска перезапуска заданий.
Желательно, чтобы задания паука и парсера были достаточно атомарны.
Паук в одну страницу постучал, записал статус получения ответа, каков контент в ответе (html или текстовое сообщение, или JSON и тд.), удалось ли ему распознать структуру, метаданные и тд.
Если, например, вернулась 404 стр, то возможно, с помощью планировщика установить правило, что можно натравить паука на url чуть позже, через час, день, неделю и тд.
По аналогии, можно фиксировать статусы работы других подсистем checker-а, парсера.
Если один из модулей застревает на 5 разе на каком-то задании, то сыпать критическую ошибку в лог и тд.

В общем, каков бы состав модулей не был, но планировщик нужен.
Ответ написан
vadi7
@vadi7
Студент, любитель *nix
Подумайте о масштабировании и возможности запуска множества экземпляров подсистем параллельно с регулированием нагрузки. Например, серверы очередей могут в этом помочь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Badoo Development Москва
от 140 000 до 180 000 руб.
SaveTime Москва
от 140 000 до 200 000 руб.
Badoo Development Москва
от 180 000 до 250 000 руб.
19 сент. 2018, в 18:50
1000 руб./в час
19 сент. 2018, в 17:47
700 руб./в час
19 сент. 2018, в 17:21
20000 руб./за проект