크롤링 라이브러리 Jsoup
크롤링을 위한 라이브러리는 많지만 그 중 Jsoup를 이용한 크롤링을 소개하고자 한다.
Jsoup이란 자바로 만들어진 HTML parser다. Jsoup는 DOM 구조를 추적하거나 CSS 선택자를 사용하여 데이터를 찾아 추출할 수 있다.
Jsoup 라이브러리 추가
- https://jsoup.org/download 에 접속하여 jsoup-?.??.?.jar 파일을 다운받아 준다.
-
해당 프로젝트 우클릭 -> 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 |