본문 바로가기
프로그래밍/자바

자바 Jsoup를 이용한 웹 크롤링 예제

by 밍구몬 2019. 2. 25.

크롤링 라이브러리 Jsoup

 

크롤링을 위한 라이브러리는 많지만 그 중 Jsoup를 이용한 크롤링을 소개하고자 한다.

Jsoup이란 자바로 만들어진 HTML parser다. Jsoup는 DOM 구조를 추적하거나 CSS 선택자를 사용하여 데이터를 찾아 추출할 수 있다.

 

 

Jsoup 라이브러리 추가

 

  • 해당 프로젝트 우클릭 -> Properties -> Java Build Path -> Add External JARs -> 다운받은 Jar파일 추가

 

 

 

Jsoup을 이용한 크롤링 예제

 

CGV를 크롤링하여 원하는 값만 가져오는 예제를 만들것이다.

 

CGV 홈페이지에서 순위와 영화이름을 가져와 보자.

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class Main {

	public static void main(String[] args) {
		// Jsoup를 이용해서 http://www.cgv.co.kr/movies/ 크롤링
		String url = "http://www.cgv.co.kr/movies/"; //크롤링할 url지정
		Document doc = null;        //Document에는 페이지의 전체 소스가 저장된다

		try {
			doc = Jsoup.connect(url).get();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//select를 이용하여 원하는 태그를 선택한다. select는 원하는 값을 가져오기 위한 중요한 기능이다.
		Elements element = doc.select("div.sect-movie-chart");    

		System.out.println("============================================================");

		//Iterator을 사용하여 하나씩 값 가져오기
		Iterator<Element> ie1 = element.select("strong.rank").iterator();
		Iterator<Element> ie2 = element.select("strong.title").iterator();
		        
		while (ie1.hasNext()) {
			System.out.println(ie1.next().text()+"\t"+ie2.next().text());
		}
		
		System.out.println("============================================================");
	}
}

 

결과

 

위에서는 while문을 사용하여 가져왔지만 for문을 통해서도 가져올 수 있다.

for(Element el : element.select("strong.rank")) {    //

            System.out.println(el.text());

}

 

div의 class로 가져올때는 div.class

id로 가져올때는 div#id

속성으로 가져오고 싶다면 [src=ming9mon.tistory.com]

 

 클래스명

설명 

Document 

 Jsoup 얻어온 결과 HTML 전체 문서

Element

 Document의 HTML 요소

Elements

 Element가 모인 자료형. for나 while 등 반복문 사용이 가능

Connection

 Jsoup의 connect 혹은 설정 메소드들을 이용해 만들어지는 객체, 연결을 하기 위한 정보를 담고 있음

Response

 Jsoup가 URL에 접속해 얻어온 결과. Document와 다르게 status 코드, status 메시지나 charset같은 헤더 메시지와 쿠키등을 가지고 있음

 

'프로그래밍 > 자바' 카테고리의 다른 글

자바 쓰레드(Thread)  (0) 2019.03.01
자바 파일 입출력 과 입출력 스트림  (0) 2019.02.27
자바 제네릭(generic)  (0) 2019.02.23
자바 컬렉션(Collection)과 Iterator  (0) 2019.02.22
자바 인터페이스(interface)  (0) 2019.02.21