Home (JAVA) JSOUP - Java HTML Parser
Post
Cancel

(JAVA) JSOUP - Java HTML Parser

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("-------------------------------------------------");
    }
  }
}

3. 결과


image

4. 참고


This post is licensed under CC BY 4.0 by the author.