일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 논문리뷰
- 리눅스
- 우분투
- pandas
- pytorch
- 크롤링
- 코딩테스트
- dropout
- Graph
- Crawling
- 데이터분석
- R
- 강화학습
- 알고리즘
- DATA
- 텍스트마이닝
- PYTHON
- 백준
- GNN
- selenium
- YarinGal
- 파이썬
- uncertainty
- 빅데이터
- AI
- 불확실성
- 텍스트분석
- bayesian
- 베이지안
- VAE
- Today
- Total
끄적거림
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 5(feat. selenium) 본문
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 1(feat. selenium)
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 2(feat. selenium)
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 3(feat. selenium)
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 4(feat. selenium)
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 5(feat. selenium)
예전에 포스팅했던 글들인데, 많은 사람들이 찾게되면서 여러가지 문의를 남기셨다.
그중에서 가장 많은 문의를 받은 것이 총 자동화된 코드를 알고싶으시다는 요청이어서 이렇게 간단하게나마 글을 끄적여본다.
일단 내 블로그를 보면 대체로 글들이 분할되어 포스팅된다.
코드들도 분산되어 있는 것을 볼 수 있는데, 왜 그렇게 하냐면 단순 복붙으로 넘어가지 않았으면 해서였다.
물론 바쁜 분들이나 기초 개발지식이 부족하신 분들에게는 하나하나 읽는 것이 고된 작업일 순 있으나, 각 기능별로 분산된 코드를 이해하고 넘어가면, 후에 비슷한 종류의 문제와 마주했을 때 보다 수월하게 본인이 직접 코딩할 수 있으리란 생각에서였다.
나 역시 코드를 찾을 때 단순 복붙보다는 코드의 의미를 파악하면서 활용하는 쪽으로 해왔기에 이것이 나중에 큰 도움이 된다는 것을 알고있다.
하지만, 이미 실력이 있으시거나, 바쁘신 분들을 위해 아래의 full code를 공유하고자 한다.
비록 나도 공부하면서 쌓은 지식들이기 때문에 부족할 수 있으나 많은 분들에게 도움이 되길 바란다.
# pip install selenium # cmd ver
# !pip install selenium # jupyter notebook ver
# 1. Load Module
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib.request as req
import pandas as pd
import numpy as np
import collections as co
import time
# 2. Enter the website page
url = "https://play.google.com/store/apps/details?id=kr.co.zumo.app&showAllReviews=true"
driverPath = "~~~~~/chromedriver.exe" # chromedriver.exe 파일이 있는 경로
driver = webdriver.Chrome(driverPath)
driver.get(url)
# 3. Scrape Data
SCROLL_PAUSE_TIME = 1.5
last_height = driver.execute_script("return document.body.scrollHeight")
for i in range(5):
# (1) 4번의 스크롤링
for i in range(4):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(SCROLL_PAUSE_TIME)
# (2) 더보기 클릭
driver.find_element_by_xpath("//span[@class='RveJvd snByac']").click()
# (3) 종료 조건
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
## [전체 리뷰] 버튼 클릭하여 펼치기
spread_review = driver.find_elements_by_xpath("//button[@jsaction='click:TiglPc']")
for i in range(len(spread_review)):
isTrue = spread_review[i].is_displayed()
print("Element is visible? " + str(isTrue))
if isTrue:
spread_review[i].click()
print(str(i)+"th more button is clicked and wait 1.5 secs...")
time.sleep(SCROLL_PAUSE_TIME)
reviews = driver.find_elements_by_xpath("//span[contains(@jsname, 'bN97Pc')]")
for i in range(len(reviews)):
print(str(i) + "\t" + reviews[i].text)
long_reviews = driver.find_elements_by_xpath("//span[@jsname='fbQN7e']")
for i in range(len(reviews)):
print(long_reviews[i].text)
## merge two list
merged_review = [t.text if t.text!='' else long_reviews[i].text for i,t in enumerate(reviews)]
dates = driver.find_elements_by_xpath("//span[@class='p2TkOb']")
likes = driver.find_elements_by_xpath("//div[@aria-label='이 리뷰가 유용하다는 평가를 받은 횟수입니다.']")
stars = driver.find_elements_by_xpath("//span[@class='nt2C1d']/div[@class='pf5lIe']/div[@role='img']")
stars_text = stars[3].get_attribute('aria-label')
# 4. Merge Data
res_deque = co.deque([])
for i in range(len(reviews)):
res_deque.append({
'DATE' : dates[i].text,
'STAR' : stars[i].get_attribute('aria-label'),
'LIKE' : likes[i].text,
'REVIEW' : merged_review[i]
})
res_df = pd.DataFrame(res_deque)
res_df.to_csv('./Crawling_data.csv', index=False, encoding='utf-8-sig')
포스팅을 읽어주신 분께서 코드에 대한 피드백을 주셨습니다.
감사합니다 :)
'Python > Crawling' 카테고리의 다른 글
[Naver News Crawling] 네이버 뉴스 기사와 댓글 크롤링 in python(feat.selenium) (1) | 2020.11.30 |
---|---|
[API] Naver 뉴스 API로 데이터 받아오기 in python (2) | 2020.11.27 |
[리뷰 크롤링] 어플 버전 history 정보 가져오기 (0) | 2020.08.04 |
[리뷰 크롤링] AppStore 어플 리뷰 가져오기 3 in python(feat.RSS) (5) | 2020.07.31 |
[리뷰 크롤링] AppStore 어플 리뷰 가져오기 2 in python(feat. cURL) (0) | 2020.07.30 |