Crawler4j и Jsoup для сканирования и анализа страниц в Java

Я хочу получить содержимое страницы и извлечь ее отдельные части. Насколько я знаю, есть как минимум два решения для такой задачи: Crawler4j и Jsoup.

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

Crawler4j гусеничный, Jsoup это парсер

Но я только что проверил, Jsoup 1.8.3 также может сканировать страницу в дополнение к функции синтаксического анализа, в то время как Crawler4j способен не только сканировать страницу, но и анализировать ее содержимое.

Таким образом, вы можете, пожалуйста, уточнить разницу между Crawler4j а также Jsoup?

1 ответ

Решение

Сканирование - это нечто большее, чем просто извлечение содержимого одного URI. Если вы просто хотите получить содержимое некоторых страниц, то нет смысла использовать что-то вроде Crawler4J,

Давайте посмотрим на пример. Предположим, вы хотите сканировать веб-сайт. Требования будут:

  1. Укажите базовый URI (домашняя страница)
  2. Возьмите все URI с каждой страницы и извлеките их содержимое.
  3. Перемещение рекурсивно для каждого URI, который вы получаете.
  4. Получить содержимое только URI, которые находятся внутри этого сайта (могут быть внешние URI, ссылающиеся на другой сайт, они нам не нужны).
  5. Избегайте кругового ползания. Страница A имеет URI для страницы B (того же сайта). Страница B имеет URI для страницы A, но мы уже получили содержимое страницы A (About страница содержит ссылку на Home страница, но мы уже получили содержимое Home страница, так что не посещайте его снова).
  6. Операция сканирования должна быть многопоточной
  7. Сайт огромен. Он содержит много страниц. Мы хотим получить только 50 URI, начиная с Home стр.

Это простой сценарий. Попробуйте решить это с Jsoup, Весь этот функционал должен быть реализован вами. Crawler4J или любая микросреда crawler в этом отношении будет или должна иметь реализацию для вышеуказанных действий. JsoupСильные качества сияют, когда вы решаете, что делать с контентом.

Давайте посмотрим на некоторые требования для разбора.

  1. Получить все абзацы страницы
  2. Получить все изображения
  3. Удалить недействительные теги (теги, которые не соответствуют HTML спецификации)
  4. Удалить теги скрипта

Это где Jsoup приходит играть Конечно, здесь есть некоторые совпадения. Некоторые вещи могут быть возможны как с Crawler4J или же Jsoup, но это не делает их эквивалентными. Вы можете удалить механизм извлечения контента из Jsoup и все же быть удивительным инструментом для использования. Если Crawler4J удалил бы поиск, тогда он потерял бы половину своей функциональности.

Я использовал их обоих в одном проекте в реальном сценарии. Я сканировал сайт, используя сильные стороны Crawler4J, для всех проблем, упомянутых в первом примере. Затем я передал содержимое каждой найденной страницы JsoupДля того, чтобы извлечь нужную мне информацию. Мог ли я не использовать один или другой? Да, я мог бы, но мне пришлось бы реализовать все недостающие функциональные возможности.

Отсюда и разница, Crawler4J это сканер с несколькими простыми операциями для разбора (вы можете извлечь изображения в одну строку), но для сложных CSS запросы. Jsoup это парсер, который дает вам простой API для HTTP Запросы. Для чего-то более сложного нет реализации.

Другие вопросы по тегам