일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jsoup
- 객체지향
- 딥러닝
- jvm
- 안드로이드 스튜디오
- HTML Parser
- Kotlin
- aging
- generics
- Android IDE
- 파이썬
- sealed class
- android studio 설치
- 파이참
- PyCharm
- InteliJ
- GIT
- thread pool
- android studio
- 안드로이드
- Schedule
- GC
- Android
- process
- data class
- fixedRateTimer
- Anaconda
- cache
- 크롤링
- 안드로이드 스튜디오 설치
- Today
- Total
탐비의 개발 낙서장
[Kotlin] JSoup 이용 웹 크롤링 해보기 본문
JSoup
jsoup은 자바(Java)로 만들어진 HTML Parser입니다. 자바로 만들어져있기 때문에, Kotlin에서 역시 jsoup의 기능을 이용해 HTML을 쉽게 다룰 수 있습니다.
JSoup 기능
- URL, 파일, 문자열을 소스로 하여 HTML을 파싱할 수 있습니다.
- DOM 구조를 추적하거나 익숙한 CSS 선택자를 사용하여 데이터를 찾아 추출할 수 있습니다.
- 문서내의 HTML 요소, 속성, 텍스트를 조작할 수 있습니다.
다음 JSoup 공식 사이트에서 다운로드 및 필요한 정보를 얻을 수 있습니다.
Kotlin에서 JSoup 사용 준비
InteliJ IDEA 환경에서, 다음과 같이 Gradle Kotlin으로 프로젝트를 생성합니다.
Project JDK도 본인 환경에 맞게 선택해주세요.
프로젝트를 생성하고 나면, 다음 그림처럼 Project Explorer에서 build.grade.kts 파일을 확인 할 수 있습니다.
해당 파일을 열어서, dependencies에 jsoup을 추가 후 Gradle Build 해 줍니다. (현재 최신 버전 1.14.1)
dependencies {
testImplementation(kotlin("test-junit"))
implementation("org.jsoup:jsoup:1.14.1")
}
여기까지 했으면 이제 Kotlin으로 JSoup을 사용할 준비가 완료되었습니다!
HTML 속성 확인
이제 크롤링 하고 싶은 웹 페이지의 HTML 태그, 클래스 등의 속성을 확인해야 합니다. 저는 구글에서 "naver"를 검색한 페이지를 가져 왔습니다. 여기서 각 검색 결과의 링크들만 추출해보려합니다.
크롬에서 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 파일이 저장됩니다.
'프로그래밍 > Kotlin' 카테고리의 다른 글
[Kotlin] 코틀린 Timer (0) | 2021.08.02 |
---|---|
[Kotlin] 코틀린 함수형 프로그래밍 (0) | 2021.07.28 |
[Kotlin] 코틀린 객체지향 설계와 다양한 클래스 타입 (0) | 2021.07.27 |
[Kotlin] XML Parser 구현 (0) | 2021.07.26 |
[Kotlin] 코틀린 제네릭(Generics)과 타입 파라미터 제약 (0) | 2021.07.19 |