1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/alisonyu-Spider

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Spider — это простой и высокопроизводительный Java-фреймворк для создания пауков.

Функции

  1. Обрабатывает различное содержимое веб-сайтов в соответствии с путями, используя регулярные выражения и функции фильтрации.
  2. Использует асинхронный Vert.x WebClient в качестве движка загрузки, что позволяет эффективно загружать содержимое веб-страниц.
  3. Позволяет гибко добавлять новые задачи паука (URL) через контекст.
  4. Предоставляет методы сохранения данных, такие как загрузка изображений, запись в файлы и запись JSON.
  5. Может выполнять задачи паука по расписанию.

Пример кода

Ниже приведён пример кода для получения изображений с сайта jandan.net:

public class Sample {
    public static void main(String[] args) {
        // Инициализация spider
        Spider spider = new Spider();
        com.alisonyu.spider.setInitUrl(getInitUri()) // Установка начального URL
                .setRouter(getRouter()) // Настройка маршрутизатора
                .start(); // Запуск паука
    }

    // Настройка маршрутизатора
    private static Router getRouter() {
        Router router = new Router();
        // route() создаёт маршрут и добавляет его в маршрутизатор
        // Можно использовать regex(), filter() и contentFilter() для гибкой проверки URL
        // handler — функция обработки после загрузки веб-страницы, в которой можно сохранить содержимое или получить новые ссылки для дальнейшего сканирования
        router.route().filter(url -> url.contains("#comments")).handler(Sample::handleOOXX);
        // setDefaultHandler используется для установки функции обработки, если ни один маршрут не соответствует запросу
        router.setDefaultHandler(context -> {
            System.out.println(context.getRequest().getUrl() + " не имеет соответствующего маршрута обработки");
        });
        return router;
    }

    // Установка начальных URL, здесь мы используем jandan.net в качестве примера
    private static List<String> getInitUri() {
        List<String> list = new ArrayList<>();
        String url = "http://jandan.net/ooxx/page-";
        for (int i = 1; i < 2; i++) {
            list.add(url + i + "#comments");
        }
        return list;
    }

    // Функция обработки для URL с #comments
    private static void handleOOXX(Context context) {
        // Использование контекста для получения содержимого в формате JSON, HTML или byte[]
        String html = context.getResponse().getHtml();
        // Мы не ограничиваем метод анализа содержимого, в этом примере мы используем Jsoup для анализа HTML
        Document parsedHtml = Jsoup.parse(html);
        // Анализ для получения ссылок для дальнейшего сканирования
        Elements pages = parsedHtml.select(".cp-pagenavi a");
        for (String link : pages.eachAttr("href")) {
            // inUrlSet() используется для предотвращения дублирования, addUrl() добавляет URL в очередь сканирования
            if (!context.inUrlSet(link)) {
                context.addUrl("http:" + link);
            }
        }
        // Получение ссылок на изображения
        Elements imgs = parsedHtml.select("#comments img");
        List<String> links = imgs.eachAttr("src");
        for (String link : links) {
            System.out.println("Скачано " + link);
            String[] ss = link.split("/");
            String fileName = ss[ss.length - 1];
            // Сохранение изображений асинхронно, класс Persistence предоставляет асинхронные функции сохранения файлов
            Persistence.download("http:" + link, "storage/" + fileName, () -> {
                System.out.println(fileName + " сохранено успешно");
            });
        }
        // Рекомендуется избегать длительных операций в этой функции, таких как операции ввода-вывода
        // Задачи, требующие времени, могут быть добавлены в функцию addWorkerTask()
        context.addWorkerTask(() -> {
           // Некоторые длительные операции
        });
    }
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Простой и эффективный фреймворк для Java-краулеров. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/alisonyu-Spider.git
git@api.gitlife.ru:oschina-mirror/alisonyu-Spider.git
oschina-mirror
alisonyu-Spider
alisonyu-Spider
master