인프런 커뮤니티 질문&답변

이정완님의 프로필 이미지
이정완

작성한 질문수

파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)

퀴즈 (다음 부동산)

24년, 부동산 퀴즈 코드입니다. 참고하세요!!

작성

·

38

0

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

# Setup Chrome options
options = webdriver.ChromeOptions()
options.add_experimental_option("detach", True)
options.add_argument("--user-agent=''")

# Initialize the browser
browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# 옵션 추가 - 웹페이지 최대화
browser.maximize_window()

# 원하는 웹사이트로 이동 
url = "https://realty.daum.net/home/apt/danjis/38487"
browser.get(url)

# 모든 요소가 로드될 때까지 대기 (최대 10초)
WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, "css-1dbjc4n")))

# 데이터 뽑기 시작
soup = BeautifulSoup(browser.page_source, "lxml")

# 매물 정보 가져오기
targets = soup.find_all("div", class_="css-1dbjc4n r-1awozwy r-s4x47v r-18u37iz r-17s6mgv r-1m04atk")

for idx, target in enumerate(targets):
    # 가격과 거래 방법 추출
    price = target.find("div", class_="css-1563yu1 r-aw03qq r-1wbh5a2 r-1w6e6rj r-159m18f r-1b43r93 r-b88u0q r-rjixqe r-13hce6t r-1ff274t r-13wfysu r-q42fyq r-1ad0z5i")
    if price:
        plate = price.get_text().split(" ")
        use = plate[0]

        final_price = ''
        for index in range(1, len(plate)):
            final_price += plate[index]
    else: 
        continue
    
    # 면적과 층수 정보 추출
    area_and_floors = target.find_all("div", class_="css-1563yu1 r-1dnsj32 r-1wbh5a2 r-1w6e6rj r-159m18f r-n6v787 r-majxgm r-14yzgew r-fdjqy7 r-13wfysu r-q42fyq r-1ad0z5i")
    if len(area_and_floors) >= 2:
        area = area_and_floors[0].get_text()
        floor = area_and_floors[1].get_text()[-3:]
    else:
        area = "N/A"
        floor = "N/A"

    print("=" * 10 + " 매물 {0} ".format(idx) + "=" * 10)
    print(f"거래 : {use}")
    print(f"가격 : {final_price}".strip())
    print(f"면적 : {area}".strip())
    print(f"층 : {floor}".strip())
    print()

browser.quit()

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 코드는 Python을 사용하여 특정 부동산 웹사이트에서 매물 정보(거래 유형, 가격, 면적, 층수)를 스크래핑하는 예시입니다. Selenium과 BeautifulSoup라이브러리를 사용하여 웹 브라우저를 자동화하고 HTML에서 데이터를 추출합니다. 보여주신 코드는 아래와 같은 과정을 거칩니다:

  1. Selenium을 이용해 Chrome 웹드라이버를 초기화하고, 추가 옵션을 설정합니다.
  2. 원하는 부동산 웹페이지로 이동합니다.
  3. 해당 페이지의 모든 요소가 로드될 때까지 최대 10초간 기다립니다.
  4. BeautifulSoup를 이용해 현재 페이지의 소스를 파싱합니다.
  5. 원하는 매물 정보를 포함하고 있는 HTML 요소를 찾고, 그 안에서 거래 유형, 가격, 면적, 층수를 추출합니다.
  6. 추출한 정보를 출력합니다.

이 코드는 웹 스크래핑을 통해 특정 데이터를 수집하는 방법을 보여주며, 특히 웹 자동화 및 데이터 파싱에 있어서 매우 유용합니다. 경험을 쌓는데 도움이 될 것입니다.

이정완님의 프로필 이미지
이정완

작성한 질문수

질문하기