탐비의 개발 낙서장

[Kotlin] JSoup 이용 웹 크롤링 해보기 본문

프로그래밍/Kotlin

[Kotlin] JSoup 이용 웹 크롤링 해보기

탐비_ 2021. 7. 21. 23:56
JSoup

 

  jsoup 자바(Java)로 만들어진 HTML Parser입니다. 자바로 만들어져있기 때문에, Kotlin에서 역시 jsoup의 기능을 이용해 HTML을 쉽게 다룰 수 있습니다.

 

JSoup 기능

 -  URL, 파일, 문자열을 소스로 하여 HTML을 파싱할 수 있습니다.

 -  DOM 구조를 추적하거나 익숙한 CSS 선택자를 사용하여 데이터를 찾아 추출할 수 있습니다.

 -  문서내의 HTML 요소, 속성, 텍스트를 조작할 수 있습니다.

 

 다음 JSoup 공식 사이트에서 다운로드 및 필요한 정보를 얻을 수 있습니다.

https://jsoup.org/

 

 

Kotlin에서 JSoup 사용 준비

 

 InteliJ IDEA 환경에서, 다음과 같이 Gradle Kotlin으로 프로젝트를 생성합니다.

Project JDK도 본인 환경에 맞게 선택해주세요.

Kotlin 프로젝트 생성

 

 프로젝트를 생성하고 나면, 다음 그림처럼 Project Explorer에서 build.grade.kts 파일을 확인 할 수 있습니다.

해당 파일을 열어서, dependencies에 jsoup을 추가 후 Gradle Build 해 줍니다. (현재 최신 버전 1.14.1)

dependencies {
    testImplementation(kotlin("test-junit"))
    implementation("org.jsoup:jsoup:1.14.1")
}

 

Gradle에 JSoup 추가

 여기까지 했으면 이제 Kotlin으로 JSoup을 사용할 준비가 완료되었습니다!

 

 

HTML 속성 확인

 

 이제 크롤링 하고 싶은 웹 페이지의 HTML 태그, 클래스 등의 속성을 확인해야 합니다. 저는 구글에서 "naver"를 검색한 페이지를 가져 왔습니다. 여기서 각 검색 결과의 링크들만 추출해보려합니다.

크롬 개발자 도구(F12)로 HTML 확인

 크롬에서 F12를 눌러 해당 페이지의 HTML을 확인할 수 있는데, 여기서 개발자 도구 좌측 상단의 표시된 버튼을 누르면 원하는 부분을 선택해 해당하는 HTML로 이동합니다.

 저는 NAVER의 링크를 확인하고 싶으니 NAVER를 한 번 눌러 보았습니다.

요소 선택 후 개발자 도구 화면

 위 그림처럼, 선택한 요소에 해당하는 부분까지 이동됩니다.

 여기서 저는 <a href="https://www.naver.com" ...> </a> 에 포함된 링크들만 골라서 가져오겠다 라는 생각을 하며, 다시 코틀린 코드로 돌아갑니다.

 

 우선 해당 사이트의 링크를 변수에 선언해 줍니다.

val searchSite = "https://google.co.kr/search?q="
val keyword = "naver"

 위 코드처럼, searchSite + keyword 형태로 구글 검색이 구성되어 있습니다.

 가장 먼저, 이 링크의 HTML 파일을 읽어와야 분석할 수 있기 때문에 해당 작업을 가장 먼저 해 줍니다.

val doc = Jsoup.connect(searchSite + keyword).get()

 여기까지 하면 doc 변수에 google.co.kr에 naver를 검색한 결과의 HTML 파일이 저장됩니다.