728x90
구글 플레이 스토어 어플리케이션 크롤링¶
필요한 lib들을 import¶
In [14]:
import numpy as np
import pandas as pd
import requests
from selenium import webdriver
import time
In [15]:
url = 'https://play.google.com/store/apps/details?id=com.ss.android.ugc.trill&showAllReviews=true'
In [16]:
data = pd.DataFrame(data=[], columns=['앱이름', '아이디', '리뷰', '별점', '날짜'])
data
Out[16]:
앱이름 | 아이디 | 리뷰 | 별점 | 날짜 |
---|
In [17]:
driver = webdriver.Chrome('../../chromedriver.exe')
driver.get(url)
- 리뷰는 스크롤을 내릴수록 늘어나므로 스크롤을 내리는 함수도 만든다.
In [18]:
def scroll_down(driver):
driver.execute_script('window.scrollTo(0, 999999)')
time.sleep(1)
In [19]:
scroll_down(driver)
In [20]:
app_name = driver.find_element_by_css_selector('.AHFaub')
app_name.text
Out[20]:
'TikTok 틱톡'
In [21]:
# user name 수집
user_names = driver.find_elements_by_css_selector('.X43Kjb')
user_names[0].text
Out[21]:
'만두'
In [22]:
reviews = driver.find_elements_by_css_selector('.UD7Dzf')
reviews[0].text
Out[22]:
'아 좋긴한데 저 같은경우는 나이제한이 있으면 불편하거든요 또 중간에 틱톡이 나가지거나..그래서 요부분을 고쳐주셨으면 합니다 아!그리고 로그인을 해도 또 로그인을 하라고 해서 혹시 계정이라도 날라갈것 같아 좀 불편하네요..이부분만 좀 고쳐주세요'
In [23]:
#별점 수집
star_grades=driver.find_elements_by_xpath('//div[@class="pf5lIe"]/div[@role="img"]')
del(star_grades[0])
star_grades[0].get_attribute('aria-label')
Out[23]:
'별표 5개 만점에 3개를 받았습니다.'
In [24]:
dates = driver.find_elements_by_css_selector('.p2TkOb')
dates[0].text
Out[24]:
'2021년 7월 31일'
In [28]:
def crawl(driver, data, k):
#어플 이름, 아이디, 리뷰, 별점, 날짜 수집
app_name = driver.find_element_by_css_selector('.AHFaub')
user_names = driver.find_elements_by_css_selector('.X43Kjb')
reviews = driver.find_elements_by_css_selector('.UD7Dzf')
# star_grades=driver.find_elements_by_xpath('//*[@id="fcxH9b"]/div[4]/c-wiz/div/div[2]/div/div/main/div/div[1]/div[2]/div/div[1]/div/div[2]/div[1]/div[1]/div/span[1]/div/div')
star_grades = driver.find_elements_by_xpath('//div[@class="pf5lIe"]/div[@role="img"]')
dates = driver.find_elements_by_css_selector('.p2TkOb')
# 평균 평점 삭제
del(star_grades[0])
# k 개의 리뷰를 수집합니다.
for i in range(k):
tmp = []
tmp.append(app_name.text)
tmp.append(user_names[i].text)
tmp.append(reviews[i].text)
tmp.append(star_grades[i].get_attribute('aria-label'))
# print(star_grades[100].get_attribute('aria-label'))
tmp.append(dates[i].text)
# 수집한 1명의 리뷰를 결과 프레임에 추가
tmp = pd.DataFrame(data=[tmp], columns=data.columns)
data = pd.concat([data, tmp])
print(app_name.text + '앱 리뷰 수집 완료')
return data
In [29]:
scroll_down(driver)
result = crawl(driver, data, 100)
TikTok 틱톡앱 리뷰 수집 완료
In [30]:
result
Out[30]:
앱이름 | 아이디 | 리뷰 | 별점 | 날짜 | |
---|---|---|---|---|---|
0 | TikTok 틱톡 | 만두 | 아 좋긴한데 저 같은경우는 나이제한이 있으면 불편하거든요 또 중간에 틱톡이 나가지거... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 31일 |
0 | TikTok 틱톡 | 수빈 | 틱톡 진~짜 다 좋은데..몇가지 단점이 있어요 1. 차단한 콘텐츠여도 계속 추천에 ... | 별표 5개 만점에 4개를 받았습니다. | 2021년 7월 17일 |
0 | TikTok 틱톡 | TikTok Pte. Ltd. | 제언니가 계정이 로그아웃이 됐어요 근데 제 언니는 아무것도 올리지 않아어요. 근데 ... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 26일 |
0 | TikTok 틱톡 | 김똬똬 | 앱을 재미있게 사용하고 있지만 단점이 조금 많은거 같아요. 1.노출이 심한 영상 이... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 30일 |
0 | TikTok 틱톡 | 이나윤 | 현금이벤트 정말 좋습니다ㅎㅎ 근데 지금 2일째 현금이벤트를 진행하고 2만원씩 하루에... | 별표 5개 만점에 4개를 받았습니다. | 2021년 7월 26일 |
... | ... | ... | ... | ... | ... |
0 | TikTok 틱톡 | 귀칼좋아하는인간 | 20분동안 시청하고 저를 초대한친구한테서 보기를했을때 차오르는 게이지가 6단계에서 ... | 별표 5개 만점에 2개를 받았습니다. | 2021년 7월 29일 |
0 | TikTok 틱톡 | 태욱방 | 최악 고객응대도 제대로 안해주는데 쓸데없이 이용자만 많은 케이스. 콘텐츠의 질도 높... | 별표 5개 만점에 1개를 받았습니다. | 2021년 7월 16일 |
0 | TikTok 틱톡 | 손영수 | 친구이벤트로 가입한사람입니다 영상시청은 잘되는데 친구코드에서 오류라고계속나오고 네트... | 별표 5개 만점에 2개를 받았습니다. | 2021년 7월 27일 |
0 | TikTok 틱톡 | TikTok Pte. Ltd. | 로그인을 할려고 했는데 로그인 문제없이 잘했는데 갑자기 계정에 문제가 있데요 전계정... | 별표 5개 만점에 1개를 받았습니다. | 2021년 7월 29일 |
0 | TikTok 틱톡 | 멍충 | 계속 12세 미만이 들어오고 비공일러를 쓰고서도 무시하고 안 내리는 어린이들이 많아... | 별표 5개 만점에 1개를 받았습니다. | 2021년 7월 25일 |
100 rows × 5 columns
In [32]:
result.reset_index(inplace=True, drop=True)
result.head()
Out[32]:
앱이름 | 아이디 | 리뷰 | 별점 | 날짜 | |
---|---|---|---|---|---|
0 | TikTok 틱톡 | 만두 | 아 좋긴한데 저 같은경우는 나이제한이 있으면 불편하거든요 또 중간에 틱톡이 나가지거... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 31일 |
1 | TikTok 틱톡 | 수빈 | 틱톡 진~짜 다 좋은데..몇가지 단점이 있어요 1. 차단한 콘텐츠여도 계속 추천에 ... | 별표 5개 만점에 4개를 받았습니다. | 2021년 7월 17일 |
2 | TikTok 틱톡 | TikTok Pte. Ltd. | 제언니가 계정이 로그아웃이 됐어요 근데 제 언니는 아무것도 올리지 않아어요. 근데 ... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 26일 |
3 | TikTok 틱톡 | 김똬똬 | 앱을 재미있게 사용하고 있지만 단점이 조금 많은거 같아요. 1.노출이 심한 영상 이... | 별표 5개 만점에 3개를 받았습니다. | 2021년 7월 30일 |
4 | TikTok 틱톡 | 이나윤 | 현금이벤트 정말 좋습니다ㅎㅎ 근데 지금 2일째 현금이벤트를 진행하고 2만원씩 하루에... | 별표 5개 만점에 4개를 받았습니다. | 2021년 7월 26일 |
데이터 전처리¶
정규표현식을 사용해서 별점에서 숫자만 고른다
TODO. 정규표현식 확인¶
In [40]:
tmp = result.copy()
In [41]:
tmp['별점'] = tmp['별점'].apply(lambda x: x[5:])
tmp.head(3)
Out[41]:
앱이름 | 아이디 | 리뷰 | 별점 | 날짜 | |
---|---|---|---|---|---|
0 | TikTok 틱톡 | 만두 | 아 좋긴한데 저 같은경우는 나이제한이 있으면 불편하거든요 또 중간에 틱톡이 나가지거... | 만점에 3개를 받았습니다. | 2021년 7월 31일 |
1 | TikTok 틱톡 | 수빈 | 틱톡 진~짜 다 좋은데..몇가지 단점이 있어요 1. 차단한 콘텐츠여도 계속 추천에 ... | 만점에 4개를 받았습니다. | 2021년 7월 17일 |
2 | TikTok 틱톡 | TikTok Pte. Ltd. | 제언니가 계정이 로그아웃이 됐어요 근데 제 언니는 아무것도 올리지 않아어요. 근데 ... | 만점에 3개를 받았습니다. | 2021년 7월 26일 |
In [43]:
import re
# 정수형 숫자 하나만 있거나, 소수점으로 계산된 점수를 추출한다.
m = re.compile('[0-9][\.0-9]*')
tmp['별점'] = tmp['별점'].apply(lambda x : m.findall(x)[0])
In [44]:
tmp.head()
Out[44]:
앱이름 | 아이디 | 리뷰 | 별점 | 날짜 | |
---|---|---|---|---|---|
0 | TikTok 틱톡 | 만두 | 아 좋긴한데 저 같은경우는 나이제한이 있으면 불편하거든요 또 중간에 틱톡이 나가지거... | 3 | 2021년 7월 31일 |
1 | TikTok 틱톡 | 수빈 | 틱톡 진~짜 다 좋은데..몇가지 단점이 있어요 1. 차단한 콘텐츠여도 계속 추천에 ... | 4 | 2021년 7월 17일 |
2 | TikTok 틱톡 | TikTok Pte. Ltd. | 제언니가 계정이 로그아웃이 됐어요 근데 제 언니는 아무것도 올리지 않아어요. 근데 ... | 3 | 2021년 7월 26일 |
3 | TikTok 틱톡 | 김똬똬 | 앱을 재미있게 사용하고 있지만 단점이 조금 많은거 같아요. 1.노출이 심한 영상 이... | 3 | 2021년 7월 30일 |
4 | TikTok 틱톡 | 이나윤 | 현금이벤트 정말 좋습니다ㅎㅎ 근데 지금 2일째 현금이벤트를 진행하고 2만원씩 하루에... | 4 | 2021년 7월 26일 |
In [47]:
tmp.to_csv('틱톡_리뷰평점.csv', encoding='utf-8')
tmp.to_excel('틱톡_리뷰평점.xlsx')
In [ ]:
728x90
'정리' 카테고리의 다른 글
[데이터베이스 강의 정리] 3. 아키텍쳐 (0) | 2021.08.05 |
---|---|
[데이터베이스 강의 정리] 2. 관계형 데이터 베이스 (0) | 2021.08.05 |
[데이터베이스 강의 정리] 1. 데이터베이스란 (0) | 2021.08.05 |
데이터 분석을 위한 5가지 절차 (0) | 2021.08.02 |
210802_jupyter-notebook_tytanic (0) | 2021.08.02 |