요기요 리뷰를 크롤링한다는 가정하에 작성하겠다.
cd ./Users/.../chromedriver다운경로
!xattr -d com.apple.quarantine chromedriver # 맥에서 크롬 브라우저 허용하는 코드
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys # enter 치는 명령어
import csv
import pandas as pd
browser = webdriver.Chrome('chromedriver 저장 경로')
browser.get('https://www.yogiyo.co.kr/mobile/#/')
search = browser.find_element_by_xpath('//*[@id="search"]/div/form/input')
search.click()
search.send_keys('검색 지역')
search.send_keys(Keys.ENTER) # 검색 후 클릭
time.sleep(15) # 로딩 시간을 위한 대기
# 스크롤 전 높이
before_h = browser.execute_script("return window.scrollY") # 현재 스크롤 된 높이를 계산
# 무한 반복문 사용
while True:
# 맨 아래로 스크롤을 내린다.
browser.find_element_by_css_selector("body").send_keys(Keys.END) # end키를 통해 스크롤을 맨 아래로 내림
# 스크롤 사이 페이지 로딩 시간 추가
time.sleep(3)
# 스크롤 후 높이 확인
after_h = browser.execute_script("return window.scrollY")
# before_h = after_h # after의 높이를 before로 갱신
if after_h > 10000: # 스크롤 높이보다 높으면 멈춤
break
# 파일 생성
f = open(r"/Users/파일 저장 경로/파일명.csv", 'w', encoding="UTF-8", newline="") # 파일 입출력 기능
csvWirter = csv.writer(f) # wirter에 파일(f) 넘겨주기
f.close()
웹 페이지에 따라 css코드가 중복으로 나오는 경우가 있다.
그럴때에는 xpath를 활용하면 된다.
def reveiw_crawling_first_scroll():
while True:
try:
browser.find_element_by_css_selector("body").send_keys(Keys.END) # end키를 통해 스크롤을 맨 아래로 내림
time.sleep(1)
# 더보기 클릭
more_click = browser.find_element_by_css_selector('li.list-group-item.btn-more')
isExistNextPage = more_click.is_enabled() # 더보기 클릭 가능하다면
if (isExistNextPage == True):
more_click.click()
time.sleep(3)
else : # 없다면 끝
break
except:
break
count = browser.find_element_by_xpath('//*[@id="content"]/div[2]/div[1]/div[5]/div[2]/div/strong[1]').text
if int(count) >= 2: # 리뷰 개수가 2개 이하면 크롤링X
for i in range(2, int(count)+1):
# 가게 이름
title = browser.find_element_by_css_selector('span.restaurant-name.ng-binding').text
items = browser.find_element_by_xpath(f'//*[@id="review"]/li[{i}]')
review = items.find_element_by_css_selector("p.ng-binding").text
print(title,'|',review,)
csvWirter.writerow([title, review, ]) # 행 추가
우클릭 -> 검사 버튼을 누른 후 원하는 css 및 xpath를 추가하면 된다.