본문 바로가기

라이브러리/JAVA

[라이브러리] <JAVA> jsoup(정적 웹 크롤링)

스크래핑이란

  • 데이터를 많이 모으는 작업을 말한다.

크롤링이란

  • 데이터를 정제하고 원하는 형태로 가공하는 작업을 말한다.
  • 요즘은 스크래핑과 합하여 크롤리이라 칭한다.
    • 데이터를 많이 모아서 원하는 output으로 정제 가공하는 작업이다.
    • 빅데이터에서 많이 활용되는 기술이다.

크롤링 방법

  • 타켓 웹 페이지의 URL을 알아낸다.
    • URL은 페이지로 구성되어있다.
    • 개발자가 페이지를 코드로 작성하면, 웹 브라우저가 코드를 해석해서 UI로 구현해서 보여준다.
  • 외부 라이브러리인 jsoup을 이용해 DB와 같은 방식으로 데이터(소스)를 긁어온다.
 

jsoup: Java HTML parser, built for HTML editing, cleaning, scraping, and XSS safety

jsoup: Java HTML Parser jsoup is a Java library that simplifies working with real-world HTML and XML. It offers an easy-to-use API for URL fetching, data parsing, extraction, and manipulation using DOM API methods, CSS, and xpath selectors. jsoup implement

jsoup.org

예제 코드

public class Test01 {

    public static void main(String[] args) {

        // 데이터가 변질되지 않도록 상수화한다.
          final String url="http://www.cgv.co.kr/movies/?lt=1&ft=0"; 

          // 웹 페이지 정보를 JAVA에서는 Document라고 함
          Document doc=null;
          // 우리가 사용할 웹 페이지 정보(Document) 타입은 JAVA에서 기본제공 x
          // 외부로부터 Document를 지원해줄수있는 .jar파일을 추가해야함!
          //  == ojdbc6.jar
          // jsoup.jar
        try {
            // Jsoup.connect(url) => connection 객체가 반환됨
             // connection.get() => document 객체가 반환됨
             // JDBC와 유사
            doc=Jsoup.connect(url).get();
        } catch (IOException e) {

             e.printStackTrace();
          }

        System.out.println(doc);

          // 내가 확인하고 싶은 영화 제목은
          // <strong class="title">로 되어있다!
        Elements elems=doc.select("strong.title");
          // 웹페이지에서의 요소
          //    element
          //    엘리먼트
          //    태그
          //    <>
          // Elements 는 일종의 ResultSet 역할

          // 이터레이터
          // 복사체
          // 컬렉션의 한 종류
          Iterator<Element> itr=elems.iterator();

          // ResultSet 처럼 1개씩 보여줄수가없어서.
          // 1개씩 보여주려고 itr 를 사용함!
         while(itr.hasNext()) {

            String str=itr.next().text();

             System.out.println(str);

      }

   }

}