Crawling
네이버 쇼핑 크롤링2_평점, 댓글수,
km1n
2022. 1. 5. 10:13
#Step 0. 필요한 모듈과 라이브러리를 로딩합니다.
import sys # 시스템
import os # 시스템
import pandas as pd # 판다스 : 데이터분석 라이브러리
import numpy as np # 넘파이 : 숫자, 행렬 데이터 라이브러리
from bs4 import BeautifulSoup # html 데이터를 전처리
from selenium import webdriver # 웹 브라우저 자동화
from selenium.webdriver.common.keys import Keys
import chromedriver_autoinstaller
import time # 서버와 통신할 때 중간중간 시간 지연. 보통은 1초
from tqdm import tqdm
from tqdm import tqdm_notebook # for문 돌릴 때 진행상황을 %게이지로 알려준다.
# 워닝 무시
import warnings
warnings.filterwarnings('ignore')
query_txt = input('1.크롤링할 키워드는 무엇입니까?: ')
query_txt
chrome_path = chromedriver_autoinstaller.install()
driver = webdriver.Chrome(chrome_path)
# 사이트 주소는 네이버쇼핑
driver.get('https://search.shopping.naver.com/search/all?query={}&cat_id=&frm=NVSHATC'.format(query_txt))
time.sleep(2) # 2초간 정지
driver.find_element_by_link_text("리뷰 많은순").click()
# 스크롤 다운
def scroll_down(driver):
driver.execute_script("window.scrollTo(0, 19431049)")
time.sleep(1)
# n: 스크롤할 횟수 설정
n = 1
i = 0
while i < n: # 이 조건이 만족되는 동안 반복 실행
scroll_down(driver) # 스크롤 다운
i = i+1
# url 리스트 만들기
things = driver.find_elements_by_css_selector(".basicList_link__1MaTN")
url_list = []
for thing in things:
url = thing.get_attribute('href')
url_list.append(url)
# 제목 리스트 만들기
title_list = []
for thing in things:
title = thing.text
title_list.append(title)
import re
# 카테고리 리스트 만들기
things2 = driver.find_elements_by_class_name("basicList_depth__2QIie")
regex = '출산/육아신생아의류(.+)'
category_list = []
for thing in things2:
category = thing.text
m = re.match(regex, category)
category_list.append(m.group(1))
things2 = driver.find_elements_by_class_name("basicList_depth__2QIie")
category_list = []
for thing in things2:
category = thing.text
category_list.append(category)
category_list
import re
regex = '출산/육아신생아의류(.+)'
m = re.match(regex, category_list[0]
m.group(1)
print(len(url_list))
url_list
df = pd.DataFrame({"url":url_list, "title":title_list, "category":category_list})
df
df.to_csv("네이버쇼핑_url.csv", encoding = 'utf-8-sig')
df.to_excel("네이버쇼핑_url.xlsx", encoding = 'utf-8-sig')
df = pd.read_csv('네이버쇼핑_url.csv')
df['url']
dict = {}
n = 40
for i in tqdm(range(0, n)):
try:
driver = webdriver.Chrome(chrome_path)
driver.get(df['url'][i])
time.sleep(3)
# 상품명 가져오기
title = driver.find_element_by_css_selector('._3oDjSvLwq9._copyable')
title = title.text
# 리뷰 영역으로 이동
driver.find_element_by_css_selector('._2pgHN-ntx6').click()
# 사용자 평점 가져오기
score = driver.find_element_by_css_selector('.TFNhvMOrjC._3uz9pzdFUe .blind')
score = score.text
score = score[-4:10]
# 사용자 리뷰수 가져오기
review_count = driver.find_element_by_css_selector('.TFNhvMOrjC._1UShjXo5FC .blind')
review_count = review_count.text
review_count = int(review_count.replace(',','')[:-1])
# 평점낮은순 정렬
driver.find_elements_by_css_selector('._1K9yWX-Lpq')[3].click()
# 리뷰 글 수집
review_list = []
overlays1 = "._1XNnRviOK8 ._19SE1Dnqkf"
reviews = driver.find_elements_by_css_selector(overlays1)
for review in reviews:
review = review.text
review_list.append(review)
target_info = {}
target_info['상품명'] = title
target_info['평점'] = score
target_info['리뷰수'] = review_count
target_info['안 좋은 리뷰'] = review_list
dict[i] = target_info
print(title, '( 댓글 수:', len(review_list),')')
driver.close()
time.sleep(2)
except:
driver.close()
continue
print(len(dict))
dict
import pandas as pd
result_df = pd.DataFrame.from_dict(dict, 'index')
result_df
result_df.to_excel("출산선물_네이버쇼핑1.xlsx", encoding='utf-8-sig')
df = df.rename(columns={'title': '상품명'})
df.head()
result_df.head()
data = pd.merge(df, result_df, on='상품명')
data.head()
data.to_excel("출산선물_네이버쇼핑카테고리1.xlsx", encoding='utf-8-sig')