Повышение эффективности, масштабируемости Crawler4j-Crawler

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

  • Я увеличил нет. потоков сканера до 10 (используя эту функцию ContentCrawler ('classfilename', 10);)
  • Я уменьшил задержку вежливости до 50 мс (используя Crawlconfig.setpolitenessdelay (50);)
  • Я даю глубину сканирования как 2 (используя Crawlconfig.setMaxDepthOfCrawling (2))

Теперь я хочу знать:

1) Есть ли какие-либо побочные эффекты при таких настройках.

2) Есть ли что-нибудь, что я должен сделать помимо этого, чтобы улучшить скорость моего краулера?

3) Может ли кто-нибудь сказать мне максимальные пределы для каждой настройки (например: - Максимальное количество потоков, поддерживаемых crawler4j за раз и т. Д.). Потому что я уже прошел через код Crawler4j, но я не нашел никаких ограничений где-либо.

4) Как сканировать домен, не проверяя его файл robots.txt. Поскольку я понял, что crawler4j сначала проверяет файл robots.txt домена перед сканированием. Я не хочу этого !!

5) Как работает сборщик страниц (пожалуйста, объясните это вкратце)

Любая помощь приветствуется, и, пожалуйста, успокойтесь, если вопрос глупый.


person Sudhir kumar    schedule 29.09.2014    source источник


Ответы (1)


Я сделаю все возможное, чтобы помочь вам здесь. Я не могу гарантировать правильность и полноту.

  1. б) Уменьшение задержки вежливости создаст дополнительную нагрузку на сайт для сканирования и может (на небольших серверах) увеличить время получения в долгосрочной перспективе. Но в настоящее время это не обычная проблема, поэтому 50 мс все равно должно хватить. Также обратите внимание, что если для получения ответа от веб-сервера требуется 250 мс, для сканирования следующей страницы этим потоком все равно потребуется 250 мс.

    c) Я не совсем уверен, чего вы хотите достичь, задав для crawlDepth значение два. Например. глубина сканирования от 1 будет означать, что вы просканируете семя, чем вы просканируете все сайты, найденные в семени, и затем остановитесь. (crawlDepth = 2 просто сделает еще один шаг и так далее). Это не повлияет на вашу скорость сканирования, только на время сканирования и найденные страницы.

  2. Не выполняйте тяжелые по времени действия в CrawlerThread и всех методах / классах, которые он охватывает. Делайте их в конце или в дополнительной нити.

  3. Сама конфигурация краулера не устанавливает ограничений. Ограничения будут установлены вашим процессором (маловероятно) или структурой сканируемого сайта (очень вероятно).

  4. Добавьте эту строку в свой CrawlController: robotstxtConfig.setEnabled(false);

Теперь это должно выглядеть так:

PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
robotstxtConfig.setEnabled(false);
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
  1. Сборщик страниц установит некоторые параметры, а затем отправит HTTP-запрос веб-сервису по заданному URL-адресу с предыдущими заданными параметрами. Ответ от веб-сервера будет оценен, и будет сохранена некоторая информация, такая как заголовок ответа и HTML-код в двоичной форме.

Надеюсь, я смогу вам немного помочь.

person Tobias K.    schedule 06.10.2014
comment
Спасибо Тобиасу за твой ответ. Вы ответили на большинство моих вопросов, и они работают хорошо, но я не понял ваш 2) ответ. Это может вы объяснить это более ясно. - person Sudhir kumar; 07.10.2014
comment
Пояснение к 1.c: - Да, то, что вы сказали, абсолютно верно. Как быстро мы завершили сканирование домена, зависит от глубины сканирования. Я тоже об этом упоминал !! - person Sudhir kumar; 07.10.2014
comment
Если вы начнете сканирование, ваш сканер инициирует себя, получит несколько URL-адресов из базы данных, начнет выборку одного, проанализирует этот, а затем в какой-то момент перейдет к методу «посещение (страница страницы)» в вашем Crawler.class. Вы не должны реализовывать что-либо вроде ввода-вывода или другого кода, который займет много времени во всем этом процессе сканирования, потому что это будет блокировать ваш поток искателя. Также вам не следует добавлять сложные объекты к классам, используемым внутри сканера, таким как WebURL или Page. - person Tobias K.; 07.10.2014