이번 글에서는 Java에서 Quartz Scheduler를 사용하여 정기적으로 크롤링을 실행하고, 그 결과를 저장하는 방법에 대해 알아보겠습니다.
Quartz Scheduler란?
Quartz Scheduler는 Java 기반의 강력한 스케줄링 라이브러리입니다. 이를 사용하여 다양한 작업을 원하는 시간에 주기적으로 실행할 수 있습니다. Quartz는 스프링 프레임워크와 통합되어 사용할 수 있어 편리하게 작업을 예약하고 실행할 수 있습니다.
크롤링 결과 저장하기
크롤링 결과를 저장하기 위해 jsoup
라이브러리를 사용할 것입니다. 먼저 Maven 프로젝트의 pom.xml
에 다음 의존성을 추가해주세요.
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.1</version>
</dependency>
크롤링 코드를 작성하기 위해 아래와 같이 Crawler.java
파일을 생성해주세요.
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class Crawler {
public static void main(String[] args) {
try {
// 크롤링할 URL 설정
String url = "https://example.com";
// Jsoup을 사용하여 HTML 파싱
Document document = Jsoup.connect(url).get();
// 원하는 데이터 선택
Elements elements = document.select(".result");
// 결과 출력
for (Element element : elements) {
System.out.println(element.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
위 코드에서는 https://example.com
에서 .result
클래스를 가진 요소를 크롤링하고, 결과를 출력합니다.
Quartz Scheduler로 크롤링 예약하기
Quartz Scheduler를 사용하여 크롤링 작업을 예약하기 위해 아래와 같이 CrawlingJob.java
파일을 생성합니다.
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class CrawlingJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
// 크롤링 코드 작성
}
}
CrawlingJob
클래스의 execute
메서드에서는 앞서 작성한 크롤링 코드를 실행하면 됩니다.
마지막으로, Quartz Scheduler로 크롤링 작업을 예약하기 위해 아래와 같이 SchedulerMain.java
파일을 생성합니다.
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
public class SchedulerMain {
public static void main(String[] args) {
try {
// 스케줄러 팩토리 생성
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 크롤링 작업(Job) 생성
JobDetail jobDetail = JobBuilder.newJob(CrawlingJob.class).build();
// 크론 표현식으로 실행 주기 설정 (예를 들어 매일 10시에 실행)
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(10, 0)).build();
// 스케줄러에 작업과 트리거 등록
scheduler.scheduleJob(jobDetail, trigger);
// 스케줄러 시작
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
위 코드에서는 CrawlingJob
클래스를 스케줄러에 등록하고, 매일 10시에 실행되도록 설정하였습니다.
결론
이렇게 Java의 Quartz Scheduler를 사용하여 크롤링 작업을 예약하고, 그 결과를 저장하는 방법에 대해 알아보았습니다. Quartz를 활용하면 자동화된 작업 스케줄링을 쉽게 구현할 수 있으며, 크롤링 결과를 저장해두면 필요한 데이터를 원하는 시간에 가져올 수 있습니다.
자세한 내용은 Quartz Scheduler 공식 홈페이지와 jsoup 공식 홈페이지를 참조하시기 바랍니다.