커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
4주차 과제 관련 네이버 쇼핑 크롤링 무한스크롤 질문있습니다.
[왕초보] 칼퇴를 부르는 파이썬 업무 자동화
4주차
북마크
고*형
댓글
11
추천
0
조회수
51
조회수
51
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


4주차 과제를 해보고 있는 도중 문의드릴게 있습니다. 네이버 쇼핑 페이지 변경때문에 아래의 코드를 적용시켜도 현재 무한 스크롤만 되고 완료가 처리가 되지 않아 엑셀 파일 생성도 안되고 결과값도 볼 수가 없는데 이 부분은 어떻게 하는지 궁금합니다..ㅠ



from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.chrome.options import Options

import time


from openpyxl import load_workbook, Workbook

from openpyxl.drawing.image import Image

import requests

from io import BytesIO


chrome_options = Options()

chrome_options.add_experimental_option("detach", True)

chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])

driver = webdriver.Chrome(options=chrome_options)


# 웹 사이트 열기

driver.get('https://www.naver.com')

time.sleep(2)

driver.find_element(By.CSS_SELECTOR, ".service_icon.type_shopping").click() #쇼핑 탭 클릭

time.sleep(2)


# 쇼핑 창이 뜨는데 그 창으로 이동

new_window = driver.window_handles[1]

driver.switch_to.window(new_window)

driver.maximize_window()

SEARCH_KEYWORD = '아이폰'


search_bar = driver.find_element(By.CSS_SELECTOR,"input._searchInput_search_text_83jy9")

search_bar.click()

search_bar.send_keys(SEARCH_KEYWORD)

search_bar.send_keys(Keys.ENTER)

time.sleep(4)


before_h = driver.execute_script("return window.scrollY")

while True:

    driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) # 스크롤 내리는 END 키

    time.sleep(1)

    after_h = driver.execute_script("return window.scrollY")

    if after_h == before_h: # 만약 옮기기 전과 후 스크롤 위치 동일하면(끝까지 다 내렸다면)

        break

    before_h = after_h


# 새 워크북 생성

wb = Workbook()

ws = wb.active

ws.title = "결과물"


# 헤더 행 추가

ws.append(['상품명', '가격', '링크', '총 리뷰 수', '이미지'])

items = driver.find_elements(By.CSS_SELECTOR, ".compositeCardContainer_composite_card_container__jr8cb composite_card_container")


for item in items:

    # 상품명

    names = item.find_elements(By.CSS_SELECTOR, ".basicProductCardInformation_title__Bc_Ng")

    name = names[0].text if names else "이름 없음"


    # 가격 찾기

    prices = item.find_elements(By.CSS_SELECTOR, ".priceTag_inner_price__TctbK")

    price = prices[0].text if prices else "가격 없음"


    # 링크 찾기

    links = item.find_elements(By.CSS_SELECTOR, ".basicProductCardInformation_title__Bc_Ng > a")

    link = links[0].text if links else "이름 없음"


    # 리뷰 수 찾기

    review_totals = item.find_elements(By.CSS_SELECTOR, ".productCardReview_text__A9N9N")

    review_total = review_totals[0].text if review_totals else "리뷰 없음"


    # 이미지 찾기

    images = item.find_elements(By.CSS_SELECTOR, ".productCardThumbnail_thumbnail__KzO1N > img")

    image = images[0].get_attribute('src') if images else "이미지 없음"

   

    ws.append([name,price,link,review_total,image])

    col_num = 5


for row_num, row in enumerate(ws.iter_rows(min_rows=2, values_only=True), start=2):

    img_url = row[col_num-1] # 이미지 url

    if img_url:

        try:

            response = requests.get(img_url)

            img = Image(BytesIO(response.content))

            img.width = 140

            img.height = 140

            cell = ws.cell(row=row_num, column=col_num)

            cell.value = ""

            ws.add_image(img, f'E{row_num}')

            ws.row_dimensions[row_num].height = 140

        except Exception as e:

            print(f"{e}")


excel_file_path = "결과물.xlsx"

wb.save(excel_file_path)


driver.quit()







취소
 공유
취소
댓글 0
댓글 알림
나의얼굴