Crawling

2024. 7. 13. 11:23TIL

✔오늘 배운 중요한 🔑 point

  • 크롤링을 사용하여 데이터를 간단하게 가져와서 활용할 수 있지만 , 잦은 조회와 상업적 이용에는 문제가 발생할 수 있으니 조심해야한다.

🎯 오늘 배운 내용

 

팀 프로젝트에서 진행하는 와인추천 서비스에서 와인에 관한 다양한 정보들을 가져오기 위해서 크롤링(Crawling)을 사용하기로 하였다.

크롤링을 어떻게 사용하고 어떻게 동작하는지에 대해서 간단하게 알아보자

 

크롤링이란?

프로그램이나 스크립트를 사용하여 웹사이트의 페이지를 자동으로 탐색하고 데이터를 수집하는 작업

 

크롤링을 사용하는 이유?

포괄적인 데이터 수집, 시장 조사, 트랜드 분석 등 이미 있는 데이터를 가지고 활용을 하기 때문에 데이터 수집에 대한 시간을 절약할 수 있으며 해당 데이터를 활용하여 새로운 insight를 얻을 수 있음

 

크롤링 동작 방식

 

  1. 시드 URL 설정: 크롤러는 먼저 크롤링할 웹 페이지의 초기 URL(시드 URL)을 설정
  2. 페이지 요청: 크롤러는 시드 URL에 HTTP 요청을 보내고, 해당 페이지의 HTML 코드를 가져옴
  3. 데이터 추출: 가져온 HTML 코드에서 원하는 데이터를 파싱(parsing)하여 추출
  4. 링크 추출: 페이지 내에 포함된 다른 URL 링크를 추출하여 저장
  5. 반복: 추출한 링크를 사용하여 다음 페이지로 이동하고, 다시 데이터를 추출하는 과정을 반복

 

 

Spring Boot에서 크롤링 사용방법

 

dependencies {

    implementation("org.jsoup:jsoup:1.18.1")

}

2024년 7월 13일 기준으로 가장 최신 버전인 1.18.1 버전을 사용하기 위해서 의존성 추가

https://jsoup.org/news/release-1.18.1

 

jsoup release 1.18.1 (2024-Jul-10)

jsoup Java HTML Parser release 1.18.1 2024-Jul-10 jsoup 1.18.1 is out now, with a new streaming parser that provides a hybrid DOM + SAX event-driven parsing interface, request progress tracking, and many other improvements. jsoup is a Java library for work

jsoup.org

 

 

package com.example.practicecrawling.domain

import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service

@Service
class WineCrawlerService {

    fun fetchWineData() {
        val url = "https://www.wine21.com/13_search/wine_list.html"
        val doc: Document = Jsoup.connect(url).get()

        val logger = LoggerFactory.getLogger(WineCrawlerService::class.java)

        logger.info("페이지 제목: ${doc.title()}")

        val wineListTable = doc.select("가져오고자하는 경로 설정")
        val wineRows = wineListTable.select("tr")

        for (row in wineRows) {
            val columns = row.select("td")
            for (column in columns) {
                logger.info("${column.text()} | ")
            }
        }

    }
}

 

정상적으로 doc에는 해당 html파일이 잘 담겨진것을 확인할 수있다.

 

doc.select()부분을 통해서 원하는 값을 가져오는 과정에 연습이 필요할 것 같다

 

🤔 어떻게 활용할까?

크롤링을 활용해서 와인데이터를 가져와 프로젝트에 활용할 수 있을 것으로 기대된다.

📓 오늘의 한줄

"Success is the result of perfection, hard work, learning from failure, loyalty, and persistence."

- Colin Powell -