강의

멘토링

로드맵

Inflearn brand logo image

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

codingchoding님의 프로필 이미지
codingchoding

작성한 질문수

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

톡딜 상품 데이터 추출하기

네이버쇼핑(닭가슴살) 크롤링

작성

·

72

1

안녕하세요 스타트코딩님! 수업 잘 듣고 있는 학생입니다. 질문이 있어 글 남깁니다.
수업 듣기 전에 혼자 해볼 때 저는 soup를 사용하지 않고 find_element를 사용해서 이렇게 코드를 작성했는데 뭐가 다른 걸까요?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd

driver = webdriver.Chrome()
driver.get('https://search.shopping.naver.com/search/all?query=%EB%8B%AD%EA%B0%80%EC%8A%B4%EC%82%B4')

# 스크롤 전 높이
last_height = driver.execute_script('return document.body.scrollHeight')

while True:
    # 스크롤 끝까지 내리기
    driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
    # 대기 시간 줘야됨 !!!
    time.sleep(1)
    # 스크롤 후 높이
    after_height = driver.execute_script('return document.body.scrollHeight')
    # 비교 (if, break)
    if last_height == after_height:
        break
    # 스크롤 전 높이 업데이트
    last_height = after_height
    
products = driver.find_elements(By.CSS_SELECTOR, '.product_item__MDtDF')
data = []
for product in products:
    name = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K').text
    link = product.find_element(By.CSS_SELECTOR, '.product_title__Mmw2K > a').get_attribute('href')
    price = product.find_element(By.CSS_SELECTOR, '.price_num__S2p_v').text.split('원')[0].replace(',', '')
    data.append([name, link, int(price)])

df = pd.DataFrame(data, columns = ['상품명', '상세페이지링크', '가격'])

df.to_excel('네이버쇼핑.xlsx')

답변 1

1

스타트코딩님의 프로필 이미지
스타트코딩
지식공유자

그렇게 작성해도 결과는 똑같으므로 괜찮습니다 ㅎㅎ

그런데 속도적인 측면에서 페이지 html을 가져온뒤 Beautifulsoup으로 크롤링하는게

유리하게 작용해요~

codingchoding님의 프로필 이미지
codingchoding
질문자

감사합니다!

codingchoding님의 프로필 이미지
codingchoding

작성한 질문수

질문하기