1. 개념
1
2
3
4
5
6
7
8
■ JSOUP
1. HTML 문서에 포함된 데이터를 분석 추출하는 JAVA 오픈소스 라이브러리
2. 정적 페이지를 크롤링 하는데 주로 사용된다.
3. 동적 페이지는 크롤링 되지 않는다. (파싱 전 HTML 소스를 가져옴)
※ 동적 페이지를 크롤링하는 방법에는 셀레니움(Selenium)이 있다.
■ 크롤링(Crawling)
- HTML 페이지를 가져와서 필요한 데이터를 추출하는 작업을 의미
2. 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1. 라이브러리 추가
- URL : https://mvnrepository.com/artifact/org.jsoup/jsoup
- Maven, Gradle과 같은 빌드 도구로 의존성을 추가하거나, jar를 다운받아 Classpath에 추가한다.
2. 소스
import java.io.IOException;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class JsoupTest {
public static void main(String[] args) {
// [Test URL] : SBS News
String URL = "https://news.sbs.co.kr/news/newsflash.do?plink=SNB&cooper";
// [Document] : Jsoup으로 가져온 HTML을 담을 객체
Document doc = null;
try {
// URL에 해당하는 HTML 전체 문서 가져오기
doc = Jsoup.connect(URL).get();
} catch(IOException e) {
e.printStackTrace();
}
// 출력 변수 선언
String title;
String content;
String date;
String writer;
// [Element] : Document의 HTML 요소
// [Elements] : Element가 모인 자료형
// 특정 값 추출 : css 선택문법을 이용, 태그를 검색하여 데이터를 가져온다.
List<Element> elements = doc.select(".w_news_list ul > li");
// 결과 값 출력
for(Element element : elements) {
title = "^title : " + element.getElementsByClass("sub").text();
content = "^content : " + element.getElementsByClass("read").text();
date = "^date : " + element.getElementsByClass("date").text();
writer = "^writer : " + element.getElementsByClass("name").text();
System.out.print(title + "\n" + content + "\n" + date + "\n" + writer + "\n");
System.out.println("-------------------------------------------------");
}
}
}