바나나b2b 엑셀 크로울링 (이셀러스활용2)

2022. 11. 15. 13:49디지털장사

반응형
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import pyautogui
import time
import pyperclip
import openpyxl
#크롬 드라이버 자동 업그레이드
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys

 

wb = openpyxl.Workbook()

 

ws = wb.active

 

ws.title = "data"
#브라우저 꺼짐 방지
chrome_options = Options()
# chrome_options.add_experimental_option('detach',True)
chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
#불필요한 에러메시지 없애기
chrome_options.add_experimental_option("excludeSwithes",["enable-logging"])

 

service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=service)
driver.set_window_size(1400, 1000)
time.sleep(10)
tabs = driver.window_handles
while len(tabs) != 1:
    driver.switch_to.window(tabs[1])
    driver.close()
    tabs = driver.window_handles

 

driver.switch_to.window(tabs[0])
time.sleep(3)
driver.find_element(By.CSS_SELECTOR, "body > div.wrap_body > div:nth-child(1) > div:nth-child(2) > div.utilWrap > div > div > a:nth-child(2)").click()
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, "#id").send_keys("아이디")
driver.find_element(By.CSS_SELECTOR, "#pass").send_keys("비번")
driver.find_element(By.CSS_SELECTOR, "#Frm > div.member_wrap.p-login > a > span").click()#로그인 완료

 

time.sleep(10)
while len(tabs) != 1: #광고 없애기
    driver.switch_to.window(tabs[1])
    driver.close()
    tabs = driver.window_handles
driver.switch_to.window(tabs[0])

 

driver.find_element(By.CSS_SELECTOR,"body > div.wrap_body > div:nth-child(1) > div:nth-child(2) > div.utilWrap > div > div > a:nth-child(8)").click()
time.sleep(5)
driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.END)
driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.HOME)
time.sleep(6)
for i in range(3,50):
    driver.find_element(By.XPATH,"//*[@id='cartBody']/tr["+str(i)+"]/td[2]/div/div/a").click()
    time.sleep(4)
    driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.END)
    driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.HOME)
    time.sleep(4)
    num = i
    management_code = driver.find_element(By.CSS_SELECTOR,"#Frm > div > div.infoWrap > div > div.goods_info > dl.goods_code > dd").text
    folder_name = "바나나건강식품"
    sanpum = driver.find_element(By.CSS_SELECTOR,"#Frm > div > div.infoWrap > div > h1").text
    price = driver.find_element(By.CSS_SELECTOR,"#Frm > div > div.infoWrap > div > div:nth-child(12) > em > b").text
    su = 999
    one_san = driver.find_element(By.CSS_SELECTOR,"#Frm > div > div.infoWrap > div > div.goods_info > dl.place_of_origin > dd").text
    img_1 = driver.find_element(By.CSS_SELECTOR,'#mainImg > li > span > img').get_attribute('src')
    img_2 = driver.find_element(By.CSS_SELECTOR,'#mainImg > li > span > img').get_attribute('src')
   
    for _ in range(6):
        driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.PAGE_DOWN)
    time.sleep(3)
    try:
        page = driver.find_element(By.CSS_SELECTOR,"#tbContent > tbody > tr > td > div.contentZoom.contentSize > p > a > img").get_attribute('src')                                                
    except:
        try:
            page = driver.find_element(By.CSS_SELECTOR," #tbContent > tbody > tr > td > div.contentZoom.contentSize > div > p > a > img").get_attribute('src')
        except:
            try:
                page = driver.find_element(By.CSS_SELECTOR,"#tbContent > tbody > tr > td > div.contentZoom.contentSize > div > img").get_attribute('src')
            except:
                page = ""
    sangse_page = "<center><img src ="'"' +str(page)+ '"'"></center>"
    # print(num, sangse_page)
    ws.append([num,management_code,folder_name,'',sanpum,price,su,'','',one_san,'살세설명 참조','','',img_1,img_2,'','','','',sangse_page,])
    time.sleep(4)
    driver.back()
    time.sleep(4)

 

wb.save("파일위치/파일이름.xlsx")

 

time.sleep(10)
 
 

허접함 .....

 
 

엑셀사용을 위해 openpyxl 추가 

cmd 창에다 pip install openpyxl 

하면 설치된다

 

 

코딩은 위와 같이 하면 된다.

 

셀레니움 사용할때 vscode 버그를 쓰면 딱딱 잡아줘서 편하게 애러를 수정할수 있었던 것 같다

 

 

 

바나나 B2B는 html 구조가 조금 달라 상세페이지 따오기 불편하였다 (예외처리)

 

그리고 가공을 하면 상세페이지가 완성이 된다.
 
 

두근대는 순간 

 

 
 

바탕화면에 머가하나 생겼다.

 

열어보자

 

   


하하하 성공이다 관리코드와 상품명은 가렸다.
이것을 엑셀파일에 옮기고 수정......

드디어 크롤링이 완성되는 순간이다.

 

실패도 있었다 

 

실패한 부분을 보니 이미지 11번가 이미지 처리였다.

 

https:// 를 http:// 로 수정하니 되기는 했는데 조금 불안하다.

 

대량등록을 시작한후 처음 일하는듯 하는 기분을 느겼다.

 

크롤링이 조금 들어가면 남이 트라이 하지 않는 도매처 상품을 대량으로 끌어다 올수 있으니 이거 이점아닐까?

 

계속 공부해 보아야 겠다.

 

 

https://www.youtube.com/channel/UCHwhZ7HPBhUh2IscPSL0pHA

 

스타트코딩

코딩 입문자들을 위해 쉽고 재미있는 강의컨텐츠를 만들고 있습니다~! [제작중인 컨텐츠] 파이썬기초 파이썬활용(크롤링, 자동화) 프론트엔드기초 (html, css, javascript, bootstrap)

www.youtube.com

유튜브 스타트 코딩 보고 했는데 도움 많이 받았다.

 

감사합니다.

반응형