Как я могу заставить crawler4j быстрее загружать все ссылки со страницы? - PullRequest
5 голосов
/ 10 января 2012

Что я делаю, это:
- сканировать страницу
- получить все ссылки на странице, поместить их в список
- запустить новый сканер, который посещает каждую ссылку списка
- скачать их

Должен быть более быстрый способ, где я могу скачать ссылки непосредственно при посещении страницы? Thx!

Ответы [ 2 ]

6 голосов
/ 10 января 2012

crawler4j автоматически сделает этот процесс за вас.Сначала вы добавляете одну или несколько начальных страниц.Это страницы, которые сначала выбираются и обрабатываются.Затем crawler4j извлекает все ссылки на этих страницах и передает их вашей функции shouldVisit.Если вы действительно хотите сканировать их все, эта функция должна просто возвращать true для всех функций.Если вы хотите сканировать только страницы в определенном домене, вы можете проверить URL-адрес и на основании этого вернуть true или false.

Те URL-адреса, которые yourVisit возвращает true, затем выбираются потоками искателя, и тот же процесс выполняетсявыполняется на них.

Пример кода здесь является хорошим примером для запуска.

2 голосов
/ 10 января 2012

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

Однако crawler4j уже предоставляет вам эту функциональность.Разделяя загрузку и обход на отдельные потоки, вы пытаетесь максимально использовать ваше соединение, сбрасывая столько данных, сколько может обработать ваше соединение и как серверы, предоставляющие информацию, могут вас отправить.Естественным ограничением является то, что, даже если вы создаете 1000 потоков, если серверы предоставляют вам контент только с частотой 0,3 Кбит / с, это все равно всего 300 КБ в секунду, которые вы будете загружать.Боюсь, вы просто не можете контролировать этот аспект.

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

...