크롤링을 하기 전 먼저 크롬 드라이버를 설치하셔야 합니다.

 

저는 학교에서 데이터 관련 프로젝트로 크롤링을 했기 때문에 영어 회화 어플 리뷰를 크롤링하였습니다.

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


# 내용이 긴 리뷰는 '전체리뷰' 버튼을 클릭해야한다.
# 크롤링하면서 '전체리뷰' 버튼 자동으로 눌러주는 동작까지는 구현 X


driver = webdriver.Chrome('자기 컴퓨터의 크롬드라이버 설치 경로')
driver.get('크롤링 할 웹 주소')


num_of_pagedowns = 430
while num_of_pagedowns:
    num_of_pagedowns -= 1
    driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
    time.sleep(1)
    try:
        driver.find_element_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div[1]/div/div/div[1]/div[2]/div[2]/div/span/span').click()
    except:
        None

#dan = driver.find_elements_by_class_name('UD7Dzf')
### 26 ~ 34줄까지 주석처리 되어 있는 부분은 특정 키워드가 포함된 리뷰들만 추출하기 위해서
### 사용한 코드입니다.
#review_text = driver.find_elements_by_xpath("//*[contains(text(), '무료')]") 
#review_text2 = driver.find_elements_by_xpath("//*[contains(text(), '표현')]")
#review_text3 = driver.find_elements_by_xpath("//*[contains(text(), '영상')]")
#review_text4 = driver.find_elements_by_xpath("//*[contains(text(), '회화')]")
#review_text5 = driver.find_elements_by_xpath("//*[contains(text(), '발음')]")
#review_text6 = driver.find_elements_by_xpath("//*[contains(text(), '반복')]")
#review_text7 = driver.find_elements_by_xpath("//*[contains(text(), '문장')]")
#review_text8 = driver.find_elements_by_xpath("//*[contains(text(), '유료')]")
review_text = driver.find_elements_by_class_name('UD7Dzf')

i = 0
for app in review_text:
    print(app.text+"\n")
    i = i+1

print(i)

# 아래 코드는 특정 키워드가 포함된 단어들만 출력시키는 코드

'''for app in review_text2:
    print("표현 : "+app.text+"\n")
for app in review_text3:
    print("영상 : "+app.text+"\n")
for app in review_text4:
    print("회화 : "+app.text+"\n")
for app in review_text5:
    print("발음 : "+app.text + "\n")
for app in review_text6:
    print("반복 : "+app.text + "\n")
for app in review_text7:
    print("문장 : "+app.text + "\n")
for app in review_text8:
    print("유료 : "+app.text + "\n")'''

 

이 크롤링 코드에서 가장 중요하다고 생각되는 건 find_element_by_* 부분이라고 생각합니다. 

프로젝트를 진행할 때 크롤링이 안되면 이 부분이 문제였기 때문인데(이것저것 키워드를 바꿔가면서 오래 헤맸습니다) 구글 플레이 스토어의 html 코드를 잘 보시고 뒤의 키워드를 결정해야 제대로 크롤링이 됩니다.

 

또한 제가 코드를 깔끔하게 짠 것이 아니기때문에 비효율적인 코드이기도 합니다. 시간이 좀 오래 걸린다는 단점이 있습니다.

코드를 보시면 페이지 다운버튼을 1초에 한번씩 자동으로 누르게 되어 있는데 구글 플레이 스토어 특성상 리뷰 끝까지 내리는 데 시간이 걸립니다.

저와 같이 프로젝트를 했던 팀원분은 이렇게 시간이 오래 걸리는 부분때문에 페이지 다운키말고 페이지 스크롤을 끝까지 내렸다가 리뷰가 아래쪽에서 갱신되면 또 다시 자동적으로 누르게해서 페이지를 이동시키는 방법을 썼었습니다.

 

또한 주의해야 할 것은 페이지가 로딩되는 시간을 sleep 함수를 이용해 꼭 기다려줘야 크롤링할 때 리뷰들이 누락되지 않습니다.