https://link2me.tistory.com/2003 에서 작성한 코드를 수정하여 엑셀로 저장하기 위한 부분을 보완하고 엑셀 저장을 시도했다.
텍스트 저장은 잘 되는데 엑셀에 이미지 저장하는 것은 실패가 된다.
이미지를 저장하는 속도 문제인지 여부는 테스트를 좀 더 해봐야 할 거 같다.
그래서 이미지 URL 을 텍스트로 저장하는 로직으로 코드를 구현했다.
| # pip install selenium # pip install chromedriver-autoinstaller  # pip install bs4 # pip install xlsxwriter from selenium import webdriver import chromedriver_autoinstaller from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time # 엑셀 처리 임포트 import xlsxwriter # 이미지 바이트 처리 from io import BytesIO import requests # 다나와 사이트 검색 options = Options() options.add_argument('headless'); # headless는 화면이나 페이지 이동을 표시하지 않고 동작하는 모드 # Excel 처리 선언 savePath = "c:/Users/zx/Documents/Python/" workbook = xlsxwriter.Workbook(savePath + 'crawling_result.xlsx') # 워크 시트 worksheet = workbook.add_worksheet() # webdirver 설정(Chrome, Firefox 등) chromedriver_autoinstaller.install() driver = webdriver.Chrome(options=options) # 브라우저 창 안보이기 # driver = webdriver.Chrome() # 브라우저 창 보이기 # 크롬 브라우저 내부 대기 (암묵적 대기) driver.implicitly_wait(5) # 브라우저 사이즈 driver.set_window_size(1920,1280) # 페이지 이동(열고 싶은 URL) driver.get('http://prod.danawa.com/list/?cate=112758&15main_11_02') # 페이지 내용 # print('Page Contents : {}'.format(driver.page_source)) # 제조사별 검색 (XPATH 경로 찾는 방법은 이미지 참조) mft_xpath = '//*[@id="dlMaker_simple"]/dd/div[2]/button[1]' WebDriverWait(driver,3).until(EC.presence_of_element_located((By.XPATH,mft_xpath))).click() # 원하는 모델 카테고리 클릭 (XPATH 경로 찾는 방법은 이미지 참조) model_xpath = '//*[@id="selectMaker_simple_priceCompare_A"]/li[16]/label' WebDriverWait(driver,3).until(EC.presence_of_element_located((By.XPATH,model_xpath))).click() # 2차 페이지 내용 # print('After Page Contents : {}'.format(driver.page_source)) # 검색 결과가 렌더링 될 때까지 잠시 대기 time.sleep(3) # 현재 페이지 curPage = 1 # 크롤링할 전체 페이지수 totalPage = 6 # 엑셀 행 수 excel_row = 1 worksheet.set_column('A:A', 40) # A 열의 너비를 40으로 설정 worksheet.set_row(0,18) # A열의 높이를 18로 설정 worksheet.set_column('B:B', 12) # B 열의 너비를 12로 설정 worksheet.set_column('C:C', 60) # C 열의 너비를 60으로 설정 worksheet.write(0, 0, '제품 모델명') worksheet.write(0, 1, '가격') worksheet.write(0, 2, '이미지') while curPage <= totalPage:     #bs4 초기화     soup = BeautifulSoup(driver.page_source, 'html.parser')     # 상품 리스트 선택     goods_list = soup.select('li.prod_item.prod_layer')     # 페이지 번호 출력     print('----- Current Page : {}'.format(curPage), '------')     for v in goods_list:         # 상품모델명, 가격, 이미지         name = v.select_one('p.prod_name > a').text.strip()         if not 'APPLE' in name:             continue         price = v.select_one('p.price_sect > a').text.strip()         img_link = v.select_one('div.thumb_image > a > img').get('data-original')         if img_link == None:             img_link = v.select_one('div.thumb_image > a > img').get('src')         imgLink = img_link.split("?")[0].split("//")[1]         img_url = 'https://{}'.format(imgLink)         # 이미지 요청 후 바이트 반환         res = requests.get(img_url) # 이미지 가져옴         img_data = BytesIO(res.content) # 이미지 파일 처리         image_size = len(img_data.getvalue()) # 이미지 사이즈          # 엑셀 저장(텍스트)         worksheet.write(excel_row, 0, name)         worksheet.write(excel_row, 1, price)         # 엑셀 저장(이미지)         if image_size > 0: # 이미지가 있으면             # worksheet.insert_image(excel_row, 2, img_url, {'image_data' : img_data})             worksheet.write(excel_row,2,img_url) # image url 텍스트 저장         # 엑셀 행 증가         excel_row += 1         # print(name,', ', price,', ', img_url)     print()     # 페이지 수 증가     curPage += 1     if curPage > totalPage:         print('Crawling succeed!')         break     # 페이지 이동 클릭     cur_css = 'div.number_wrap > a:nth-child({})'.format(curPage)     WebDriverWait(driver,3).until(EC.presence_of_element_located((By.CSS_SELECTOR,cur_css))).click()     # BeautifulSoup 인스턴스 삭제     del soup     # 3초간 대기     time.sleep(3) # 브라우저 종료 driver.close()     # 엑셀 파일 닫기 workbook.close() # 저장 | 
728x90
    
    
  'Web 크롤링 > Python Crawling' 카테고리의 다른 글
| 파이썬 selenium 활용 네이버 뉴스 스탠드 크롤링 (0) | 2021.06.28 | 
|---|---|
| 파이썬 selenium 활용 다나와 제품 검색 모든 페이지 크롤링 (0) | 2021.06.28 | 
| 파이썬 selenium 으로 다나와 제품 검색 페이지 전환 크롤링 (0) | 2021.06.26 | 
| 파이썬 selenium 으로 다나와 제품 리스트 크롤링 (4) | 2021.06.26 | 
| 파이썬 selenium driver 설치 및 스크래핑 기초 학습 (0) | 2021.06.26 | 
