프로젝트 준비 덕분에
네이버쇼핑 선물하기 빠른배송 웹 크롤링을 해보았다.
'나도코딩'의 네이버 항공권 웹크롤링 영상 시청 후,
혼자 응용한 것이다.
# 필요한 모듈 불러오기
import time
from selenium import webdriver
import pandas as pd
# url 띄우기, path, browser 저장
PATH = '/Users/j/Desktop/ITStudy/Project01/chromedriver'
browser = webdriver.Chrome(PATH)
url = 'https://m.shopping.naver.com/gift/plans/570448'
browser.get(url)
browser.maximize_window()
webdriver가 잘 작동되지않아, 절대경로로 지정하였다.
# selenium 잘 동작하는지 확인
print(browser.find_element_by_xpath('//*[@id="content"]/div/div[2]/div/ul/li[1]').text)
결과는 아래와 같이 성공적으로 잘 나왔다.
찜하기
17,000원
할인율
15%
[본사직영] 오설록 구움과자(마들렌,휘낭시에) 세트
상품 자세히보기
# 빠른 배송 가능한 목록 불러오기
file_list = browser.find_elements_by_xpath('//*[@id="content"]/div/div[2]/div/ul/li')
item_list = [i.text for i in file_list]
# 창 닫기
browser.quit()
해당 xpath에 존재하는 text들을 for문을 돌려 뽑아낸 후,
item_list라는 list를 만들어주었다.
저기서 바로 DataFrame으로 만들어주려 했으나...
아래와 같이 패턴이 다른 요소들이 있어,
(['17,000원', '할인율', '15%', '[본사직영] 오설록 구움과자(마들렌,휘낭시에) 세트'],
['18,000원', '할인율', '10%', '[본사직영] 오설록 다쿠아즈 세트'],
['29,900원', '[구매확정2,000원+리뷰5,000원][매일유업] 키즈부스트 밀크 750g 1캔'])
전처리를 해주었다.
# 데이터프레임화 시키기 위해 아이템 별로 리스트화
# 필요없는 element 삭제 : 찜하기, 자세히보기, 할인율
item = []
for i in range(0,len(item_list)):
item.append(item_list[i].split('\n'))
item[i].remove("찜하기")
item[i].remove("상품 자세히보기")
# 패턴이 다른 element 같게 만들기
if item[i][1] != '할인율':
item[i].insert(1,"---")
item[i].insert(1,"---")
그 결과 리스트가 예쁘게, 내가 원하는 요소들로 정리되어,
DataFrame으로 만들어주었다.
item_df = pd.DataFrame(item)
item_df
그리고, 다른 페이지도 똑같은 순서로 반복하여 두개의 데이터프레임을 더 만들어내,
3개의 dataframe을 합쳤다.
(웹 크롤링은 똑같은 코드라 생략)
naver_quick = pd.concat([item_df,item_df2,item_df3], ignore_index=True)
naver_quick
마지막으로 csv 파일로 만든 후,
웹 크롤링의 기초 과정을 끝냈다.
naver_quick.to_csv("naver_quick.csv", mode='w')
웹크롤링 어렵게만 느껴졌었는데,
막상 해보니까 너무 재밌었다.
그런데 카테고리 별로 크롤링을 하다보니, 같은 과정을 계속해서 반복하는 것이 좀 비효율적으로 느껴져서
함수 등을 이용해 코드를 좀 더 짧고 간단하게 짜는 방법을 연구해야겠다.