웹 크롤링은 웹사이트에서 원하는 정보를 추출하는 기술입니다. Jsoup은 자바에서 HTML 문서를 파싱하고 데이터를 추출하는 데 유용한 라이브러리입니다. 이번 블로그 글에서는 Jsoup을 사용하여 로또 정보를 크롤링하는 방법을 단계별로 설명하겠습니다.
1. Jsoup 라이브러리 추가
먼저, 프로젝트에 Jsoup 라이브러리를 추가해야 합니다. Maven 또는 Gradle을 사용하는 경우, 해당 종속성을 추가합니다.
- Maven:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.15.4</version>
</dependency>
- Gradle:
implementation 'org.jsoup:jsoup:1.15.4'
2. 크롤링할 웹사이트 분석
로또 정보를 크롤링할 웹사이트를 선택하고, 원하는 정보가 포함된 HTML 요소를 분석합니다. 예를 들어, 동행복권 웹사이트에서 로또 당첨 번호를 크롤링하려면 해당 페이지의 HTML 구조를 살펴봐야 합니다.
3. Jsoup으로 웹 페이지 가져오기
Jsoup을 사용하여 웹 페이지의 HTML 문서를 가져옵니다. Jsoup.connect() 메서드를 사용하여 웹 페이지에 연결하고, get() 메서드를 호출하여 Document 객체를 얻습니다.
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() 메서드를 사용하여 요소의 텍스트 또는 속성 값을 가져옵니다.
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을 사용하여 로또 정보를 크롤링하는 방법을 익히고, 다양한 웹 크롤링 프로젝트에 활용해 보세요.
'프로그래밍' 카테고리의 다른 글
안드로이드 Retrofit으로 로또 당첨 번호 JSON 데이터 가져오기: 1000회차 예시 (0) | 2025.03.20 |
---|---|
안드로이드 Retrofit으로 로또 당첨 정보 가져오기: 크롤링 예시 코드 (0) | 2025.03.20 |
안드로이드 Room DB 사용 가이드: 코드 예시와 함께 완벽 정복! (0) | 2025.03.20 |
프래그먼트 안의 프래그먼트 네비게이션, 데이터 바인딩으로 더욱 깔끔하게! (0) | 2025.03.20 |
안드로이드 프래그먼트 네비게이션, 데이터 바인딩으로 더 효율적으로! (0) | 2025.03.20 |