Ответы пользователя по тегу Crawling
  • Как в рамкак одного соединения посылать множество GET запросов?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Попробуйте клиент из Java 9.
    Не закрывайте клиент. Добавьте хендлер для кук.

    var cookieHandler = new CookieManager();
            CookieHandler.setDefault(cookieHandler);
           var executor = Executors.newWorkStealingPool(10);
           var httpClient = HttpClient.newBuilder()
                    .executor(executor)
                    .connectTimeout(Duration.ofSeconds(15))
                    .version(HttpClient.Version.HTTP_2)
                    .followRedirects(HttpClient.Redirect.ALWAYS)
                    .cookieHandler(CookieHandler.getDefault())
                    .build();


    Используйте повторно при последующих запросах.

    Например так :

    final HttpRequest httpRequest = HttpRequest.newBuilder()
                    .GET().uri(URI.create(url))
                    .build();
            return httpClient.sendAsync(httpRequest, RESPONSE_BODY_HANDLER)
                    .thenApply(response -> System.out.println(response.statusCode()));
    Ответ написан
    2 комментария
  • Какой оптимальный способ сбора данных со сторонних сайтов?

    CellycoMobiles
    @CellycoMobiles
    indi developer @CellycoMobiles
    Прекрасный выбор технологий.
    Осталось только в много потоке запустить краулеры.
    Ну или, если реализовывать миуросервисы, параллельно несколько инстансов запускать, которые будут обрабатывать каждый сайт, который нужно контролировать.

    Рекомендовал бы второй вариант. Это удобнее, например произошла какая-то ошибка в одном из коаулкров - остальные продолжили работу, пока кубер поднимает упавший.

    В моей компании парсеры реализованы на Vertx.
    Причины выбора этого фреймворка:
    1. Собственный DNS resolver. хост, либо 8.8.8.8, либо кастомизируемый список.
    2. Неблокирующие запросы. Можно запускать много запросов одновременно. Спасает на бесплатных медленных проксях.
    3. сложные блокирующие операции, как например парсинг ответа или ожидание капчи, реализуются в отдельных потоках. Worker threads, с отдельным пулом. Очень комфортно разделять от общей лоики.


    Много пишу. Слушайте у меня есть уже реализованы проект, открытый на гитхабе. В конкурсе участвовал, но проиграл. Там как раз все о чем пишу реализовано. Только не все Javadocs расписаны.

    Может я статейку на Хабр напишу, чем все в один ответ запихивать... Как вы считаете?
    Ответ написан
    2 комментария