[python] web crawling

Zero·2022년 5월 17일
0

python

목록 보기
5/6

프로젝트 준비 덕분에
네이버쇼핑 선물하기 빠른배송 웹 크롤링을 해보았다.

'나도코딩'의 네이버 항공권 웹크롤링 영상 시청 후,
혼자 응용한 것이다.

# 필요한 모듈 불러오기
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')


웹크롤링 어렵게만 느껴졌었는데,
막상 해보니까 너무 재밌었다.

그런데 카테고리 별로 크롤링을 하다보니, 같은 과정을 계속해서 반복하는 것이 좀 비효율적으로 느껴져서
함수 등을 이용해 코드를 좀 더 짧고 간단하게 짜는 방법을 연구해야겠다.

profile
코딩 일기

0개의 댓글