基于RxJava的多线程网络爬虫

时间:2019-04-22 18:52:39

标签: java multithreading rx-java2

我有多个网站,我想不时检查更新。为此,我使用带有chrome实例的selenide(硒包装),因此最后我将在单独的线程中打开多个浏览器,并保持打开状态,直到每个站点/线程都满足条件为止。为了实现这一点,我正在考虑像这样的东西

 AtomicReference<Scraper> scraper = null;
 Observable.interval(0,3, TimeUnit.SECONDS, Schedulers.io())
            .doOnSubscribe( tick ->  scraper.set(new Scraper("https://..")))
            .takeWhile(tick -> !scraper.get().isLive())
            .doOnEach(tick ->
                scraper.get().readFromSite();
                  )
            .doOnError(err -> System.out.println("Error retrieving messages"))
            .subscribe();

Scraper打开浏览器并立即在其构造函数中登录。我不知何故需要重用已打开的绑定到线程的浏览器实例,并不时在其上运行readFromSite方法。我发现Observable.generate可能有用,因为它具有可调用的参数以提供初始状态,但不知道如何将其与interval合并或是否适合我的目标。

0 个答案:

没有答案