웹개발/Java & JavaScript

[java] Jsoup을 이용한 크롤링 (자바 크롤링)

건뱅 2019. 3. 2.
반응형

 

 학원에서 파이널 프로젝트때 친구가 맡은 부분인 '크롤링' 이란 기능에 흥미가 생겨서 개인프로젝트에서 사용해보기로하였다. 진행하던 중에 자바로 간단하게 크롤링 실습을 해보았는데 그 내용을 올려본다.

 

크롤링이란 기능은 보통 Python에서 많이 쓴다고는 하지만, 자바에서는 Jsoup 라이브러리를 통해 제공한다.

 

크롤링 라이브러리(Jsoup)

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

- 크롤링을 하려면 Jsoup 라이브러리를 추가해야한다.

  => https://jsoup.org/download 에서 .jar파일을 다운받아 추가하거나, 스프링레거시프로젝트로 진행중이라면 메이븐을 통해 추가 시킬 수있다.

 

* 프로젝트에 라이브러리 추가방법 *

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

 

라이브러리 추가가 완료된다면 크롤링할 사이트를 찾아본다. 

 

필자는 개인프로젝트에서 단어장을 매일 업로드하기위해 크롤링 할 만한 사이트를 찾다가 

'네이버 영어사전' 이 오늘의 단어를 매일 업데이트를 해주는 것 같아서 선택해보았다.

크롤링할 주소=> https://endic.naver.com/?sLn=kr

 

저는 이부분을 크롤링 해보았습니다.(오늘의 단어를 감싸는 ul태그)

 

 

 

 

<코드>

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
51
52
package com.wordbook.util;
 
 
import java.io.IOException;
import java.util.Iterator;
import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class Crawler {
//크롤러
    public static void main(String[] args) {
 
        // Jsoup를 이용해서 https://endic.naver.com/?sLn=kr 크롤링
 
        String url = "https://endic.naver.com/?sLn=kr";    //크롤링할 url지정
        Document doc = null;        //Document에는 페이지의 전체 소스가 저장된다
 
    try {
 
            doc = Jsoup.connect(url).get();
 
        } catch (IOException e) {
 
            e.printStackTrace();
 
        }
    
        //select를 이용하여 원하는 태그를 선택한다. select는 원하는 값을 가져오기 위한 중요한 기능이다.
        //                               ==>원하는 값들이 들어있는 덩어리를 가져온다
        Elements element = doc.select("ul.component_today_word"); 
      
 
        System.out.println("============================================================");
 
        //Iterator을 사용하여 하나씩 값 가져오기
        //덩어리안에서 필요한부분만 선택하여 가져올 수 있다.
        Iterator<Element> ie1 = element.select("a.word_link").iterator();
 
        Iterator<Element> ie2 = element.select("div.txt_trans").iterator();
 
        while (ie1.hasNext()) {
 
            System.out.println(ie1.next().text()+"\t"+ie2.next().text());
 
        }
 
        System.out.println("============================================================");
 
}
}
cs
 

 크롤링할때 위 코드와 아래사진을 비교해보면 ul.component_today_word 식으로 선택해서 웹을 긁어낼 수 있는데 쉽게 생각하면 '태그타입.클래스 명' 이라고 생각하면 됩니다.

 ex) <ul class= "component_today_word"> </ul>
 
결과화면(consol)

 

 

 

 

참고블로그 : https://ming9mon.tistory.com/

 
 

 

반응형

댓글