본문 바로가기
프로젝트 (Project)

[네이버쇼핑] 전동킥보드DB 만들기 (크롤링, 텍스트 마이닝)

by moveho 2022. 11. 23.

무분별한 크롤링, 과도한 작동은 삼갑시다.

네이버 스마트 스토어 운영하시는 분이 전동 킥보드 관련 물품을 다루시는데 문의 전화가 올 때마다 그때그때 문의 들어오는 것에 대한 정보를 찾아볼 수 있는 데이터베이스가 있으면 좋을 거 같다 하셔서, 재능기부 및 공부 겸 크롤링과 텍스트 마이닝을 활용하여 간단하게 킥보드 제품명을 검색하면 전압, 충전규격 등을 알 수 있는 DB를 만들어 보았다.

 

데이터는 네이버 상위 랭크 10페이지까지 있는 킥보드 종류로 하였다.

품목을 살펴보니 네이버 쇼핑에 전동킥보드를 검색하면 상위 말고는 킥보드의 부품이나 소모품들이 훨씬 많았다.

driver = webdriver.Chrome('c:/chromedriver.exe')
url = 'https://www.naver.com'
driver.get(url)
driver.implicitly_wait(5)
driver.maximize_window()
driver.find_element(By.CSS_SELECTOR ,'a.nav.shop').click()

search = driver.find_element(By.CSS_SELECTOR,'input._searchInput_search_text_3CUDs')
search.click()
search_nm = '전동킥보드'
search.send_keys(search_nm)
search.send_keys(Keys.ENTER)

다음과 같은 코드로 자동화로 네이버쇼핑의 전동 킥보드 검색을 할 수 있었다.

상위 상품들을 살펴 보면 이렇다.

상품명의 제목들을 살펴보면 브랜드, 킥보드 이름, V, Ah 정보를 얻을 수 있어 제목을 타깃으로 정하여 데이터를 수집하기로

결정하였다!

 

old_h = driver.execute_script("return window.scrollY")
while True:
    driver.find_element(By.CSS_SELECTOR,'body').send_keys(Keys.PAGE_DOWN)
    time.sleep(1)
    new_h = driver.execute_script("return window.scrollY")
    if new_h == old_h:
        break
    old_h = new_h

이와 같은 동작으로 스크롤로 맨 아래 까지 내려가서 한 페이지에 담을 수 있는 최대의 상품을 탐색했다.

titleList=[]
priceList=[]
linkList=[]

items = driver.find_elements(By.CSS_SELECTOR,'div.basicList_info_area__TWvzp')
for item in items:
    title = item.find_element(By.CSS_SELECTOR,'.basicList_title__VfX3c').text

    price = item.find_element(By.CSS_SELECTOR,'.price_num__S2p_v').text

    link = item.find_element(By.CSS_SELECTOR,'.basicList_title__VfX3c > a').get_attribute('href')

    titleList.append(title)
    priceList.append(price)
    linkList.append(link)

 

그리고 각각의 정보들을 titleList, priceList, linkList 에 담기 위해 빈 리스트를 만들고

해당하는 정보의 Elements의 태그를 찾아 올바르게 입력해줍니다.

해당 웹사이트의 개발자 모드에 진입하여 제목, 가격, 링크에 관한 데이터를 수집했습니다.

elements 요소 찾기

 

data = {'제품명':titleList, '가격':priceList,'링크정보':linkList}
df = pd.DataFrame(data)
df.to_csv('전동킥보드db.csv', encoding='utf-8-sig',index=False)

이렇게 수집된 정보를 저장합니다.

잘 저장된 모습.

 

 

이제 데이터프레임을 열어 깔끔하고 보기 좋게 정형해주는 작업을 시작하겠습니다.

 

수집된 정보

총 464개의 정보가 수집되었다.

 

이 비정형데이터의 정형은 제품명에서 브랜드, 제품명, Ah, W, V(볼트) 를 각각 뽑아내서

새로운 칼럼에 넣어줘야 합니다.

 

 

a = df['제품명'].str.contains('Ah|ah|AH|W|w')

bool형태

value에 원하는 값 Ah, ah, AH, W, w 가 포함된 제목만을 뽑아내기 위해 탐색해보았다.

원하는 값을 포함된 value는 153개인 것을 확인했다.

 

153 개 추출 완료

내가 원하는 값을 가진 data는 총 153개인 것을 확인 후 데이터 프레임으로 보았다.

 

temp = df['제품명'].str.split(' ', expand = True, n=15)
temp

 

텍스트를 '__' 스페이스로 구분하여 뽑아봤다.

이제 이걸 어떻게 만지고 만져 각각 칼럼에 원하는 값을 넣어줘야 한다.

우선은... 153개를 추출한 것을 엑셀 파일로 만들어

임시 DB를 완성했다.

 

이렇게 된 데이터에서 컨트롤 F 눌러서 찾아야 된다 

 

아직 나아가야 할게 많다.

데이터를 직접 수집하고 처리하였지만 더 예쁘게 가공하고 싶은 마음이 굴뚝같다.

더 나아가서는 애플리케이션으로도 구동해보고 싶다.

 

많이 배우고 경험해야겠다.

댓글