Crawler4j и Jsoup для сканирования и анализа страниц в Java
Я хочу получить содержимое страницы и извлечь ее отдельные части. Насколько я знаю, есть как минимум два решения для такой задачи: Crawler4j и Jsoup.
Оба они способны извлекать содержимое страницы и извлекать ее части. Единственное, что я не понимаю, в чем разница между ними? Есть похожий вопрос, который помечен как ответивший:
Crawler4j
гусеничный,Jsoup
это парсер
Но я только что проверил, Jsoup 1.8.3
также может сканировать страницу в дополнение к функции синтаксического анализа, в то время как Crawler4j
способен не только сканировать страницу, но и анализировать ее содержимое.
Таким образом, вы можете, пожалуйста, уточнить разницу между Crawler4j
а также Jsoup
?
1 ответ
Сканирование - это нечто большее, чем просто извлечение содержимого одного URI. Если вы просто хотите получить содержимое некоторых страниц, то нет смысла использовать что-то вроде Crawler4J
,
Давайте посмотрим на пример. Предположим, вы хотите сканировать веб-сайт. Требования будут:
- Укажите базовый URI (домашняя страница)
- Возьмите все URI с каждой страницы и извлеките их содержимое.
- Перемещение рекурсивно для каждого URI, который вы получаете.
- Получить содержимое только URI, которые находятся внутри этого сайта (могут быть внешние URI, ссылающиеся на другой сайт, они нам не нужны).
- Избегайте кругового ползания. Страница A имеет URI для страницы B (того же сайта). Страница B имеет URI для страницы A, но мы уже получили содержимое страницы A (
About
страница содержит ссылку наHome
страница, но мы уже получили содержимоеHome
страница, так что не посещайте его снова). - Операция сканирования должна быть многопоточной
- Сайт огромен. Он содержит много страниц. Мы хотим получить только 50 URI, начиная с
Home
стр.
Это простой сценарий. Попробуйте решить это с Jsoup
, Весь этот функционал должен быть реализован вами. Crawler4J или любая микросреда crawler в этом отношении будет или должна иметь реализацию для вышеуказанных действий. Jsoup
Сильные качества сияют, когда вы решаете, что делать с контентом.
Давайте посмотрим на некоторые требования для разбора.
- Получить все абзацы страницы
- Получить все изображения
- Удалить недействительные теги (теги, которые не соответствуют
HTML
спецификации) - Удалить теги скрипта
Это где Jsoup
приходит играть Конечно, здесь есть некоторые совпадения. Некоторые вещи могут быть возможны как с Crawler4J
или же Jsoup
, но это не делает их эквивалентными. Вы можете удалить механизм извлечения контента из Jsoup
и все же быть удивительным инструментом для использования. Если Crawler4J
удалил бы поиск, тогда он потерял бы половину своей функциональности.
Я использовал их обоих в одном проекте в реальном сценарии. Я сканировал сайт, используя сильные стороны Crawler4J
, для всех проблем, упомянутых в первом примере. Затем я передал содержимое каждой найденной страницы Jsoup
Для того, чтобы извлечь нужную мне информацию. Мог ли я не использовать один или другой? Да, я мог бы, но мне пришлось бы реализовать все недостающие функциональные возможности.
Отсюда и разница, Crawler4J
это сканер с несколькими простыми операциями для разбора (вы можете извлечь изображения в одну строку), но для сложных CSS
запросы. Jsoup
это парсер, который дает вам простой API для HTTP
Запросы. Для чего-то более сложного нет реализации.