Архитектура пауков и скребков


Я создавал скребок и паука на php, когда я задал этот вопрос о дизайне. Мне было интересно о компромиссах между созданием системы, которая разделяет задачи обхода и очистки (как, похоже, делают большинство профессиональных систем), и той, которая очищает, когда ползает паук. Единственное, о чем я мог подумать, это то, что, разделив его и используя очередь, вы могли бы лучше распараллелить задачу, имея несколько скребков, которым просто нужно спросить очередь, какую следующую страницу нужно очистить. Может ли кто-нибудь придумать другие компромиссы и объяснить мне основную причину, по которой они обычно разделяются на две программы?

Примечание: порядок обхода одинаков в обоих случаях, разница лишь в том, когда страница извлекается.

Author: hackartist, 2012-04-16

1 answers

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

Приведенный вами пример является хорошим: если вы объединяете извлечение с обработкой в одном классе/модуле/программе/функции/чем угодно, любое изменение способа извлечения страниц (например, параллельное извлечение, извлечение через прокси и т. Д.) Требует перезаписи вся программа целиком.

Вот еще одно: если вы хотите обрабатывать данные другого типа (например, rss-каналы вместо html-страниц), вам нужно написать весь свой скребок с нуля, и вы не можете повторно использовать любую работу, которую вы выполнили при извлечении страницы.

 2
Author: Francis Avila, 2012-04-16 06:15:34