Jsoup은 Java의 라이브러리로 웹 문서에 대한 크롤링 기능을 제공한다.
Maven Repository에서 Jsoup을 검색하면 여러 목록이 보이는데 거기에서 "Jsoup Java HTML Parser"를 클릭하면 다음과 같이 라이브러리를 다운로드 할 수 있는 페이지로 연결된다.
최신 버전중에 사람들이 많이 다운로드받은 1.13.1 버전을 받아 사용하였다.
Maven이나 Gradle 프로젝트였다면 의존성 관리를 통해 추가해줄 수 있지만, 순수 자바로 할 것이기 때문에 jar파일을 다운로드 해주었다.
프로젝트 구조에서 모듈 -> 종속요소에 다운로드 받은 jar 파일을 넣어주고 적용한다.
그러면 Jsoup을 사용할 준비가 된 것이다.
파일 구조는 다음과 같다.
크롤링할 자료는 어떤 블로그의 제목과 글 내용이다.
DTO 작성
크롤링한 자료를 리스트형태로 반환해줄 함수를 작성할 것이기 때문에 이 리스트의 자료형이 될 BlogDto를 작성한다.
package com.dto;
public class BlogDto {
private String title;
private String contents;
public BlogDto() {
}
public BlogDto(String title, String contents) {
this.title = title;
this.contents = contents;
}
public String getTitle() {
return title;
}
public String getContents() {
return contents;
}
@Override
public String toString() {
return "제목: " + title + "\n" +
"내용: " + contents + "\n" +
"--------------------------------------------";
}
}
다음으로 크롤러를 작성할 것이다. 크롤링할 정보는 HTML 태그의 종속관계를 따져서 써야한다.
package com.crawler;
import com.dto.BlogDto;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Crawler {
public static List<BlogDto> getBlog() throws IOException {
List<BlogDto> list = new ArrayList<>();
Document doc = Jsoup.connect("https://blossom6729.tistory.com").get();
Elements titles = doc.select("div.post-item a span.title");
Elements contents = doc.select("div.post-item a span.excerpt");
for (int i = 0; i < 8; i++) {
Element title = titles.get(i);
Element content = contents.get(i);
String titleStr = title.text();
String contentStr = content.text();
BlogDto dto = new BlogDto(titleStr, contentStr);
list.add(dto);
}
return list;
}
}
반복문의 숫자 범위를 8로 지정한 이유는 8개가 해당 페이지에서 보이는 최대 컨텐츠 개수이기 때문이다.
숫자를 맞춰주지 않으면 익셉션이 발생하므로 주의해야 한다.
추가로 이 함수는 static(정적)이기 때문에 어느 곳에서나 접근할 수 있다.
이제 메인함수에서 작동하는지 살펴볼 것이다.
package com;
import java.io.IOException;
import static com.crawler.Crawler.getBlog;
public class Main {
public static void main(String[] args) throws IOException {
for (int i = 0; i < 8; i++) {
System.out.println(getBlog().get(i).toString());
}
}
}
마찬가지로 반복문의 범위를 8로 지정해주었다.
잘 출력 되는 것을 확인할 수 있다.
'Study > Java' 카테고리의 다른 글
[Java] 최대공약수와 최소공배수를 구하는 함수 (0) | 2022.04.25 |
---|---|
[Java] Reflection(리플렉션) (0) | 2022.04.24 |
Java : 디자인패턴, 싱글톤 (0) | 2022.02.16 |
Java : 제네릭, 컬렉션(ArrayList, LinkedList, HashMap, TreeMap) (0) | 2022.02.16 |
Java : 추상클래스, 인터페이스, 정적변수와 상수 (0) | 2022.02.16 |