본문 바로가기
프로그래밍

Jsoup으로 정보 크롤링하기: 초보자 가이드 (로또 사이트 예시)

by Kongkongpapa 2025. 3. 17.
반응형
SMALL

웹 크롤링은 웹사이트에서 원하는 정보를 추출하는 기술입니다. Jsoup은 자바에서 HTML 문서를 파싱하고 데이터를 추출하는 데 유용한 라이브러리입니다. 이번 블로그 글에서는 Jsoup을 사용하여 로또 정보를 크롤링하는 방법을 단계별로 설명하겠습니다.

1. Jsoup 라이브러리 추가

먼저, 프로젝트에 Jsoup 라이브러리를 추가해야 합니다. Maven 또는 Gradle을 사용하는 경우, 해당 종속성을 추가합니다.

  • Maven:
XML
 
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.4</version>
</dependency>
  • Gradle:
Gradle
 
implementation 'org.jsoup:jsoup:1.15.4'

2. 크롤링할 웹사이트 분석

로또 정보를 크롤링할 웹사이트를 선택하고, 원하는 정보가 포함된 HTML 요소를 분석합니다. 예를 들어, 동행복권 웹사이트에서 로또 당첨 번호를 크롤링하려면 해당 페이지의 HTML 구조를 살펴봐야 합니다.

3. Jsoup으로 웹 페이지 가져오기

Jsoup을 사용하여 웹 페이지의 HTML 문서를 가져옵니다. Jsoup.connect() 메서드를 사용하여 웹 페이지에 연결하고, get() 메서드를 호출하여 Document 객체를 얻습니다.

Java
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;

public class LottoCrawler {
    public static void main(String[] args) throws IOException {
        String url = "https://www.dhlottery.co.kr/gameResult.do?method=byWin";
        Document doc = Jsoup.connect(url).get();
        // ... (이하 코드)
    }
}

4. 원하는 정보 추출

Document 객체를 사용하여 원하는 정보를 추출합니다. select() 메서드를 사용하여 CSS 선택자를 기반으로 HTML 요소를 선택하고, text() 또는 attr() 메서드를 사용하여 요소의 텍스트 또는 속성 값을 가져옵니다.

Java
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;

public class LottoCrawler {
    public static void main(String[] args) throws IOException {
        String url = "https://www.dhlottery.co.kr/gameResult.do?method=byWin";
        Document doc = Jsoup.connect(url).get();

        // 회차 정보 추출
        Elements roundElements = doc.select(".win_result strong");
        String round = roundElements.first().text();
        System.out.println("회차: " + round);

        // 당첨 번호 추출
        Elements numberElements = doc.select(".win_result .num.win span");
        for (int i = 0; i < numberElements.size(); i++) {
            String number = numberElements.get(i).text();
            System.out.print(number + " ");
        }
    }
}

5. 예외 처리

웹 크롤링 중에는 다양한 예외가 발생할 수 있습니다. IOException과 같은 예외를 처리하여 안정적인 크롤링 코드를 작성해야 합니다.

 

6. Android 에서 jsoup 사용 

android 에서 사용하는 것도 크게 차이는 없습니다.  호출 시 스레딩 구분을 위해 코루틴으로 감싸서 구분해서 처리해 주면 좀더 용이할 수 있습니다.

 

kotlin 

import android.util.Log
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import java.security.KeyManagementException
import java.security.NoSuchAlgorithmException
import java.security.SecureRandom
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLHandshakeException
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
import javax.net.ssl.HttpsURLConnection


object CrawlerUtil {

    fun useJsoup(url: String, listener : (doc:Document) -> Unit) {
        CoroutineScope(Dispatchers.IO).launch {

            try {
//                setSSL()
                Jsoup.connect(url).ignoreHttpErrors(true).followRedirects(true).get().let { doc ->
                    listener.invoke(doc)
                }
            } catch (e : Exception){
                for (t in e.stackTrace){
                    Log.d("ERROR", t.toString())
                }
            } catch (e : SSLHandshakeException){
                for (t in e.stackTrace){
                    Log.d("ERROR", t.toString())
                }
            }
        }

    }
}

 

 

 

주의사항:

  • 웹사이트의 robots.txt 파일을 확인하여 크롤링이 허용되는지 확인해야 합니다.
  • 웹사이트에 과도한 요청을 보내지 않도록 주의해야 합니다.
  • 크롤링한 데이터를 상업적으로 이용하는 것은 저작권 침해에 해당될 수 있습니다.

결론:

Jsoup은 웹 크롤링을 위한 강력하고 사용하기 쉬운 라이브러리입니다. 위 가이드를 통해 Jsoup을 사용하여 로또 정보를 크롤링하는 방법을 익히고, 다양한 웹 크롤링 프로젝트에 활용해 보세요.

반응형
LIST