Guidelines

BeautifulSoup μ›Ή 크둀링의 ν•œκ³„

requests와 BeautifulSoup λΌμ΄λΈŒλŸ¬λ¦¬λŠ” λ³€ν•˜μ§€ μ•ŠλŠ” μ›Ήμ‚¬μ΄νŠΈ, 즉 정적인 데이터λ₯Ό ν¬λ‘€λ§ν•˜λŠ” 데에 μ‚¬μš©λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ΅œμ‹  μ›Ήμ‚¬μ΄νŠΈλ“€μ€ μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ— 따라 데이터λ₯Ό λ™μ μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μ„œλ²„μ— 좔가적인 데이터λ₯Ό μš”μ²­ν•˜κ³ , μ„œλ²„λ‘œλΆ€ν„° 받은 응닡값을 μ›Ή λΈŒλΌμš°μ €μ˜ JavaScriptκ°€ μ²˜λ¦¬ν•˜μ—¬ 화면에 이λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

requests λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 정적 HTMLλ§Œμ„ κ°€μ Έμ˜¬ 수 있고, BeautifulSoup은 κ°€μ Έμ˜¨ HTML을 νŒŒμ‹±ν•˜λŠ” 데에 μ‚¬μš©λ©λ‹ˆλ‹€.

JavaScriptκ°€ μƒμ„±ν•˜κ±°λ‚˜ λ³€κ²½ν•˜λŠ” λ°μ΄ν„°λŠ” requests둜 κ°€μ Έμ˜¬ 수 μžˆλŠ” HTML에 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, κΈ°μ‘΄ λ°©μ‹μœΌλ‘œλŠ” JavaScript둜 μ²˜λ¦¬ν•œ 데이터λ₯Ό 크둀링할 수 μ—†μŠ΅λ‹ˆλ‹€.


동적 데이터λ₯Ό ν¬λ‘€λ§ν•˜λŠ” 방법?

ν•˜μ§€λ§Œ Seleniumλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹€μ œλ‘œ μ›Ή λΈŒλΌμš°μ €λ₯Ό μ‹€ν–‰μ‹œν‚€κ³ , JavaScriptκ°€ μ‹€ν–‰λœ ν›„μ˜ DOM을 크둀링할 수 μžˆμŠ΅λ‹ˆλ‹€.

기상청 ν™ˆνŽ˜μ΄μ§€λŠ” JavaScriptλ₯Ό ν™œμš©ν•΄ λ™μ μœΌλ‘œ 날씨 정보λ₯Ό ν‘œμ‹œν•˜κΈ° λ•Œλ¬Έμ— BeautifulSoupμœΌλ‘œλŠ” 데이터λ₯Ό μ œλŒ€λ‘œ κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ Selenium을 μ‚¬μš©ν•˜λ©΄ μ‹€μ œ λΈŒλΌμš°μ €μ—μ„œ JavaScriptκ°€ μ‹€ν–‰λœ ν›„μ˜ 화면을 가져와, μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³  : μ‹€μŠ΅ μ½”λ“œλ₯Ό μ»΄ν“¨ν„°μ—μ„œ μ‹€μ œλ‘œ μ‹€ν–‰ν•˜λ €λ©΄, pip install selenium λͺ…λ Ήμ–΄λ‘œ Selenium 라이브러리λ₯Ό μ„€μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Selenium을 μ‚¬μš©ν•œ 동적 μ›Ή 크둀링
from selenium import webdriver from selenium.webdriver.common.by import By # Chrome λΈŒλΌμš°μ € μ—΄κΈ° driver = webdriver.Chrome() # 기상청 동넀 예보 νŽ˜μ΄μ§€ μ—΄κΈ° url = "https://www.weather.go.kr/w/index.do" driver.get(url) # 기온과 μ²΄κ°μ˜¨λ„ μ°ΎκΈ° # 'tmp' ν΄λž˜μŠ€λŠ” ν˜„μž¬ κΈ°μ˜¨μ„ λ‚˜νƒ€λ‚΄κ³ , 'chill' ν΄λž˜μŠ€λŠ” μ²΄κ°μ˜¨λ„λ₯Ό λ‚˜νƒ€λƒ„ temperature_element = driver.find_element(By.CLASS_NAME, 'tmp') feels_like_element = driver.find_element(By.CLASS_NAME, 'chill') # ν…μŠ€νŠΈ μΆ”μΆœ temperature = temperature_element.text feels_like = feels_like_element.text # κ²°κ³Ό 좜λ ₯ print(f"였늘의 기온: {temperature}") print(f"μ²΄κ°μ˜¨λ„: {feels_like}") # WebDriver μ’…λ£Œ driver.quit()

μ½”λ“œ 상세 μ„€λͺ…

  • driver = webdriver.Chrome() : Chrome λΈŒλΌμš°μ €λ₯Ό μ—΄κ³ , driver 객체 생성

  • driver.get(url) : μ§€μ •ν•œ URL(기상청 ν™ˆνŽ˜μ΄μ§€)둜 이동

  • temperature_element = driver.find_element(By.CLASS_NAME, 'tmp') : tmp 클래슀λ₯Ό 가진 μš”μ†Œλ₯Ό μ°Ύμ•„ temperature_element에 μ €μž₯

  • feels_like_element = driver.find_element(By.CLASS_NAME, 'chill') : chill 클래슀λ₯Ό 가진 μš”μ†Œλ₯Ό μ°Ύμ•„ feels_like_element에 μ €μž₯

  • temperature = temperature_element.text : temperature_element의 ν…μŠ€νŠΈλ₯Ό μΆ”μΆœν•˜μ—¬ temperature에 μ €μž₯

  • feels_like = feels_like_element.text : feels_like_element의 ν…μŠ€νŠΈλ₯Ό μΆ”μΆœν•˜μ—¬ feels_like에 μ €μž₯

  • driver.quit() : WebDriver μ’…λ£Œ


좜λ ₯ κ²°κ³Ό μ˜ˆμ‹œ
였늘의 기온: 30.4℃ μ²΄κ°μ˜¨λ„: 체감(30.6℃)

μ΄λ ‡κ²Œ Selenium을 μ‚¬μš©ν•˜λ©΄ JavaScript둜 λ™μ μœΌλ‘œ μƒμ„±λœ μ½˜ν…μΈ λ₯Ό 크둀링할 수 μžˆμŠ΅λ‹ˆλ‹€.

Selenium λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ 더 μžμ„Έν•œ λ‚΄μš©μ€ 파이썬과 AI둜 λλ‚΄λŠ” 업무 μžλ™ν™” μ»€λ¦¬ν˜λŸΌμ—μ„œ λ°°μš°μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€!

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result