커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
엑셀까지만 생성되고 데이터는 추가 되지 않는 이슈
칼퇴를 부르는 파이썬 업무 자동화
챕터 3
북마크
김*리
댓글
3
추천
0
조회수
11
조회수
11
답변 완료

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

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



안녕하세요

챕터3의 3-8강 진행 중입니다.

네이버 크롤링으로 제품 관련 정보를 엑셀 파일로 생성하는 것 테스트 중이고

네이버가 최근 네이버 스토어로 변경 되어 해당 부분 다른 분 문의에 답변 주신 것 반영해서 코드 ㅈ수정해보았는데

엑셀까지만 생성되고 안에 제품 정보는 안 들어가네요 ㅠ.ㅠ

혹시 어떤 부분이 잘못되었는지 봐주실 수 있으실까요?





작성한 코드 및 에러 메세지

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
import requests
from io import BytesIO
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.styles import PatternFill, Alignment


# 크롬 드라이버 옵션 설정
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(1)




# 쇼핑 메뉴 클릭하기


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


time.sleep(1)




# 새창을 바라보게 만들기


new_window = driver.window_handles[1]


driver.switch_to.window(new_window)


# 화면 최대화 해야지 검색창이 보임


driver.maximize_window()




# 검색창 클릭


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


search.click()




# 검색어 입력


search.send_keys("후드티")


search.send_keys(Keys.ENTER)


# 스크롤 전 높이
before_h = driver.execute_script("return window.scrollY")


# 무한 스크롤
while True:
    # 맨 아래로 스크롤 내린다.
    driver.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.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(['상품명', '가격', '링크', '총 리뷰 수', '이미지'])


# 상품 정보 div


items = driver.find_elements(By.CSS_SELECTOR, ".basicProductCard_basic_product_card__TdrHT.basicProductCard_view_type_grid2__vKr1n")




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].get_attribute('href') 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 "이미지 없음"


# E열에 해당하는 열 번호 설정
col_num = 5 


for row_num, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2):
    img_url = row[col_num-1]  # E열의 이미지 URL
    if img_url:  # 이미지 URL이 있다면
        try:
            response = requests.get(img_url)  # 이미지 URL로부터 이미지 다운로드
            img = Image(BytesIO(response.content))  # 이미지 객체 생성
            img.width = 140
            img.height = 140
            cell = ws.cell(row=row_num, column=col_num)
            cell.value = ""  # 기존의 이미지 URL을 비움
            ws.add_image(img, f'E{row_num}')  # 이미지 삽입 위치 지정
            ws.row_dimensions[row_num].height = 140  # 셀 높이 조정
        except Exception as e:
            print(f"{e}")


# 배경색 지정
color = PatternFill(start_color='FFA07A', end_color='FFA07A', fill_type='solid')
for row in ws.iter_rows(min_row=1, max_row=1):  # 첫 번째 행에 적용 (데이터 제목 행)
    for cell in row:
        cell.fill = color


# 열 너비 변경
ws.column_dimensions['A'].width = 30
ws.column_dimensions['E'].width = 20


# 수직 가운데 맞춤 설정
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
    for cell in row:
        cell.alignment = Alignment(vertical="center")


# Excel 파일 저장
excel_file_path = "상품 정보.xlsx"
wb.save(excel_file_path)


# 웹드라이버 종료

driver.quit()



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