리뷰를 크롤링을 하고 싶을 때, 크롤링 코드 짤까 하다가 시간이 부족 + 귀찮음이 공존하였다.
그때 알게 된 것이 google-play-scraper, app-store-scraper 라이브러리
사용 방법도 사이트에 잘 나와 있다.
사용하려면 라이브러리를 설치하면 되는데 아래와 같이 하면 된다.
# 구글
pip install google-play-scraper
# 애플
pip3 install app-store-scraper
https://pypi.org/project/google-play-scraper/
google-play-scraper
Google-Play-Scraper provides APIs to easily crawl the Google Play Store for Python without any external dependencies!
pypi.org
https://pypi.org/project/app-store-scraper/
app-store-scraper
Single API ☝ App Store Review Scraper 🧹
pypi.org
티스토리앱을 기준으로 한번 크롤링을 해보자.
기본적인 코드는 해당 홈페이지에서,,,
구글 플레이스토어
앱에 대한 설명
코드의 처음을 보면 앱의 id값을 입력해 주어야 한다.
이 id값은 어떻게 알 수 있을까?
아래는 구글 플레이 스토어의 티스토리 앱 해당 URL이다.
https://play.google.com/store/apps/details?id=net.daum.android.tistoryapp&hl=ko
티스토리 - TISTORY - Google Play 앱
티스토리 블로거만을 위한 모바일 앱! 통계부터 에디터까지, 모바일에서도 편리한 블로그 관리.
play.google.com
요 URL을 보면 id = ~~~ 적혀 있는 부분의 값이 필요하다.
즉, net.daum.android.tistoryapp 값이 id값이다.
from google_play_scraper import app
result = app(
'net.daum.android.tistoryapp',
lang='ko', # defaults to 'en'
country='kr' # defaults to 'us'
)
기본적으로 언어, 국가는 영어와 미국으로 설정되어 있는데, 한국이니까 한국어와 국가는 한국으로 바꾸어 주었다.
위와 같이 코드를 실행시키고 result값을 한 번 살펴보자.
result를 찍으면 아래와 같이 앱에 대한 설명이 나온다.
{'title': '티스토리 - TISTORY',
'description': '티스토리 블로거만을 위한 모바일 앱!\r\n티스토리 앱을 소개합니다.\r\n\r\n▼▼ 주요 기능 안내 ▼▼\r\n\r\n1. 블로그 시작하기\r\n티스토리가 처음이신가요? 카카오계정을 통해 티스토리 블로그를 시작하실 수 있습니다. \r\n\r\n2. 홈 탭과 통계\r\n블로그의 지금 이 순간 정보를 한 눈에 바라볼 수 있습니다.\r\n최근 7일간의 방문수 추이, 실시간 유입 로그, 그리고 최근 7일 간의 유입 키워드를 손쉽게 조회해보세요.\r\n방문수 그래프를 터치하시면 통계 상세 정보를 확인하실 수 있습니다.\r\n\r\n3. 피드\r\nPC 웹에서만 접속할 수 있었던 티스토리 피드를 모바일에서도 즐겨보세요.\r\n관심 있는 주제의 블로그를 구독하고, 언제 어디서나 편하게 새 글을 확인하실 수 있습니다.\r\n\r\n4. 검색\r\n티스토리 모든 블로그에서 콘텐츠를 검색해보세요.\r\n또는 각 블로그 내부에서 개별 검색을 하실 수 있습니다.\r\n\r\n5. 에디터\r\nPC 웹에서 작성한 글도 이제는 모바일앱에서 수정해보세요.\r\n새 글 역시 모바일에서 간편하게 작성할 수 있습니다.\r\n\r\n6. 알림\r\n실시간으로 발생하는 댓글, 내 블로그 구독, 팀블로그 초대 등 알림을 확인하실 수 있습니다.\r\n\r\n7. 내 블로그\r\n블로그 이미지부터 이름과 설명 등 중요 정보를 직관적으로 수정할 수 있습니다.\r\n글의 공개 상태를 손쉽게 변경하고, 글별 통계로도 빠르게 접근하는 것이 가능합니다.\r\n\r\n* 원활한 티스토리 앱 사용을 위해 다음과 같은 접근 권한을 요청합니다.\r\n\r\n[선택 접근 권한]\r\n- 저장공간: 기기에 저장된 이미지, 동영상, 파일을 첨부하기 위해 필요합니다.\r\n- 카메라: 이미지, 동영상을 촬영하기 위해 필요합니다.\r\n- 마이크: 동영상을 촬영하기 위해 필요합니다.\r\n\r\n* 선택 접근 권한은 동의하지 않아도 앱을 사용할 수 있습니다.\r\n* 티스토리 앱은 안드로이드 버전 5.0 이상의 운영체제 환경에서 작동합니다.\r\n\r\n* 서비스 공지 블로그 :\xa0https://notice.tistory.com\r\n* 고객센터 문의 :\xa0https://cs.kakao.com/requests?service=175&locale=ko\r\n----\r\n개발자 연락처 :\r\n1577-3754',
'descriptionHTML': '티스토리 블로거만을 위한 모바일 앱!<br>티스토리 앱을 소개합니다.<br><br>▼▼ 주요 기능 안내 ▼▼<br><br>1. 블로그 시작하기<br>티스토리가 처음이신가요? 카카오계정을 통해 티스토리 블로그를 시작하실 수 있습니다. <br><br>2. 홈 탭과 통계<br>블로그의 지금 이 순간 정보를 한 눈에 바라볼 수 있습니다.<br>최근 7일간의 방문수 추이, 실시간 유입 로그, 그리고 최근 7일 간의 유입 키워드를 손쉽게 조회해보세요.<br>방문수 그래프를 터치하시면 통계 상세 정보를 확인하실 수 있습니다.<br><br>3. 피드<br>PC 웹에서만 접속할 수 있었던 티스토리 피드를 모바일에서도 즐겨보세요.<br>관심 있는 주제의 블로그를 구독하고, 언제 어디서나 편하게 새 글을 확인하실 수 있습니다.<br><br>4. 검색<br>티스토리 모든 블로그에서 콘텐츠를 검색해보세요.<br>또는 각 블로그 내부에서 개별 검색을 하실 수 있습니다.<br><br>5. 에디터<br>PC 웹에서 작성한 글도 이제는 모바일앱에서 수정해보세요.<br>새 글 역시 모바일에서 간편하게 작성할 수 있습니다.<br><br>6. 알림<br>실시간으로 발생하는 댓글, 내 블로그 구독, 팀블로그 초대 등 알림을 확인하실 수 있습니다.<br><br>7. 내 블로그<br>블로그 이미지부터 이름과 설명 등 중요 정보를 직관적으로 수정할 수 있습니다.<br>글의 공개 상태를 손쉽게 변경하고, 글별 통계로도 빠르게 접근하는 것이 가능합니다.<br><br>* 원활한 티스토리 앱 사용을 위해 다음과 같은 접근 권한을 요청합니다.<br><br>[선택 접근 권한]<br>- 저장공간: 기기에 저장된 이미지, 동영상, 파일을 첨부하기 위해 필요합니다.<br>- 카메라: 이미지, 동영상을 촬영하기 위해 필요합니다.<br>- 마이크: 동영상을 촬영하기 위해 필요합니다.<br><br>* 선택 접근 권한은 동의하지 않아도 앱을 사용할 수 있습니다.<br>* 티스토리 앱은 안드로이드 버전 5.0 이상의 운영체제 환경에서 작동합니다.<br><br>* 서비스 공지 블로그 :\xa0https://notice.tistory.com<br>* 고객센터 문의 :\xa0https://cs.kakao.com/requests?service=175&locale=ko<br>----<br>개발자 연락처 :<br>1577-3754',
'summary': '티스토리 블로거만을 위한 모바일 앱! 통계부터 에디터까지, 모바일에서도 편리한 블로그 관리.',
'installs': '1,000,000+',
'minInstalls': 1000000,
'realInstalls': 1159079,
'score': 2.8690746,
'ratings': 4872,
'reviews': 2366,
'histogram': [1803, 494, 615, 450, 1505],
'price': 0,
'free': True,
'currency': 'KRW',
'sale': False,
'saleTime': None,
'originalPrice': None,
'saleText': None,
'offersIAP': False,
'inAppProductPrice': None,
'developer': 'Kakao Corp.',
'developerId': 'Kakao+Corp.',
'developerEmail': 'tistoryblog@daum.net',
'developerWebsite': 'https://www.tistory.com',
'developerAddress': '제주특별자치도 제주시 첨단로 242 (주)카카오',
'privacyPolicy': 'https://www.tistory.com/info/privacy',
'genre': '소셜',
'genreId': 'SOCIAL',
'icon': 'https://play-lh.googleusercontent.com/HOwb9RHtv3AsCEyB-v1ni4z1TMgjqUJRP9FWFLNVsG-D8xoxxtfjGigzudTgSs0l8_g',
'headerImage': 'https://play-lh.googleusercontent.com/aRcQtTyVQ6nt7IewZYRAwmUbE7ZpOuDr8i7b-sywQQZ7CxqJOUMU-uFuGPa_ur2WqQ7f',
'screenshots': ['https://play-lh.googleusercontent.com/8yrR05ztXYn-FJl4JS1mf3tTfr4PlycMxlSMpONa-5zji1aek5YpKhdhfsOLJwR17fx_',
'https://play-lh.googleusercontent.com/DdwJo46-BU2I0qAXi8mjf0-BQ2LeguplD6WGoqSF2KUbS-zCHmsBZ0KbeXaRm7DT7GiH',
'https://play-lh.googleusercontent.com/Aidf9Pth7MC6_DavrDYMXxd87n-75SIq5blFahEnNZojbCydu0JK6p_Sk4QznKaWHN7b',
'https://play-lh.googleusercontent.com/NEgX1Jse7eSkzGAlHmLgOwjUO8C9QsRoAnIfGvjwaCmTANOM5HOezZle81qluqOc8llC',
'https://play-lh.googleusercontent.com/5a0hVbhhchWd8AyXzuGOm_Y8ci7Vsy377SomzR9HKRpEclU9SwztBPKB5esfmvXUwfHA',
'https://play-lh.googleusercontent.com/TM9L-f_v-7nrv76P6tstkdeAUmtwM_YF3CSmO58e-i_2z3iHOY91HizeGF3_PQvcN8E',
'https://play-lh.googleusercontent.com/IQwcxa3FFPjImmQBiWis1hGtC-cM2W41MeKJ631PU-n_biBktgHdG3wzgBqccdEI'],
'video': None,
'videoImage': None,
'contentRating': '만 12세 이상',
'contentRatingDescription': '보호자 동반 권장',
'adSupported': False,
'containsAds': False,
'released': '2014. 7. 15.',
'updated': 1673488178,
'version': '2.5.6',
'comments': [],
'appId': 'net.daum.android.tistoryapp',
'url': 'https://play.google.com/store/apps/details?id=net.daum.android.tistoryapp&hl=ko&gl=kr'}
이제 설명을 보았으니
리뷰를 가져와 보자
리뷰
from google_play_scraper import Sort, reviews
result, continuation_token = reviews(
'net.daum.android.tistoryapp',
lang='ko', # defaults to 'en'
country='kr', # defaults to 'us'
sort=Sort.NEWEST, # defaults to Sort.NEWEST
count=3, # defaults to 100
filter_score_with=5 # defaults to None(means all score)
)
# If you pass `continuation_token` as an argument to the reviews function at this point,
# it will crawl the items after 3 review items.
result, _ = reviews(
'net.daum.android.tistoryapp',
continuation_token=continuation_token # defaults to None(load from the beginning)
)
티스토리 리뷰를 가져오는 로직이다.
앞서 설명했던 부분 빼고 하나씩 설명을 하자면,
- sort : 리뷰가 최신순으로 정렬해 주는 부분이다. 기본적으로는 최신으로 정렬을 해온다.
- count : 한 번에 리뷰가 얼마큼 가져올 건지, 기본적으로는 100개 여기 로직에선 3개만 가져오도록 함
- filter_score_with : 평점이 몇 점인 것을 가져올지 기본적으로는 설정하지 않으며 전부를 가져옴 여기 로직에선 5점만 가져오도록 함
- continuation_token : 로드된 데이터 이후의 항목을 크롤링해줌 즉 1000개를 가져왔다면 다음번에는 1000개 이후의 데이터를 가져옴
[{'reviewId': '09cedc23-4074-495e-acd1-3086bd697606',
'userName': '왕샤오롱빈황',
'userImage': 'https://play-lh.googleusercontent.com/a-/ACB-R5TZSWZtr_-t0y_7_QXmV7tgdfa0wFmBwHswj1m84g',
'content': '티스토리 앱 최고입니다.',
'score': 5,
'thumbsUpCount': 0,
'reviewCreatedVersion': '2.5.6',
'at': datetime.datetime(2022, 12, 15, 11, 52, 53),
'replyContent': None,
'repliedAt': None},
{'reviewId': '003cbb8d-41bb-4350-a4f2-2c4b4aff816e',
'userName': '김로맨스',
'userImage': 'https://play-lh.googleusercontent.com/a-/ACB-R5RrVo7lRckHt_bXyoMCvzpO96_9QT3Ft8aJim-RhQ',
'content': 'pc관리자 모드와 비교해서 못하는 기능이 있지만 대부분의 기본적인 기능이 있어서 좋습니다.',
'score': 5,
'thumbsUpCount': 0,
'reviewCreatedVersion': '2.5.5',
'at': datetime.datetime(2022, 12, 4, 3, 4, 22),
'replyContent': None,
'repliedAt': None},
{'reviewId': '9bfe4dce-562f-4a8f-9a9a-66c545bb7dd4',
'userName': '박수상',
'userImage': 'https://play-lh.googleusercontent.com/a-/ACB-R5Qcxt7ohZeMQoa2SB6Kg7cY6gQdBnw2mT9wShRYtbU',
'content': '사용하기 편함.',
'score': 5,
'thumbsUpCount': 0,
'reviewCreatedVersion': '2.5.5',
'at': datetime.datetime(2022, 11, 22, 12, 19, 11),
'replyContent': None,
'repliedAt': None}]
위의 로직을 실행시키고 result를 하면 저런 결과가 나온다.
상세하게 나와서 필요한 정보만 쓰기 좋을 것 같다.
만약에 리뷰를 숫자 제한 없이 보고 싶다면 reviews_all를 사용해 주면 된다.
✨공식 깃허브에 따른다면 플레이스토어에서 한 번에 최대 200개의 리뷰를 가져올 수 있어 그 개수만큼 나누어서 호출된다고 함
from google_play_scraper import Sort, reviews_all
result = reviews_all(
'net.daum.android.tistoryapp',
sleep_milliseconds=0, # defaults to 0
lang='ko', # defaults to 'en'
country='kr', # defaults to 'us'
)
모든 리뷰가 나오는데 너무 많아서 결과는 생략
이제 리뷰를 가져왔으니, 필요한 정보만 가져올 예정이다. 리뷰와, 평점만 필요하니 리뷰, 평점 데이터만 가져와 데이터 프레임으로 만들 생각이다.
결괏값은 list타입이고, 그 안에 딕셔너리로 데이터들이 들어있다.
import pandas as pd
pd.DataFrame(result)
코딩을 실행하면 위와 같이 데이터 프레임으로 결과가 나온다.
데이터 프레임으로 변환했으니, 필요한 데이터만 가져오고, 칼럼명을 한글로 변경해서 사용할 것이다.
df_rev = rev_df[['content','score']]
df_rev.columns = ['리뷰','평점']
df_rev.head()
이렇게 데이터 프레임까지 만들었다. 필요에 따라서 원하는 데이터를 가지고 사용하면 될 듯하다.
앱스토어
앱스토어도 비슷하게 되는데 똑같이 티스토리 앱으로 예시를 들어보자.
앱스토어도 플레이스토어와 비슷하지만 조금 다른 부분이 있다. 비교를 하며 설명을 할 생각이다!
from app_store_scraper import AppStore
from pprint import pprint
tistory = AppStore(country="kr", app_name="tistory")
tistory.review(how_many=3)
pprint(tistory.reviews)
pprint(tistory.reviews_count)
- country (필수) : 국가
- app_name (필수) : 앱 이름
- app_id (옵션) : 플레이스토어와 같이 앱의 id값을 넣어 줄 수 있다.
how_many를 지정해주지 않는다면 모든 리뷰가 나온다고 한다.
하지만, 공식페이지에 따르면 요청당 가져올 수 있는 리뷰의 최대 개수는 20개이며, 호출 횟수를 최소화하기 위해 20개라는 제한이 하드코딩되어 있다고 한다.
저 코드를 실행한다면 리뷰수는 20개로 나오지만, 만약 how_many 지정을 하지 않았을 경우 639건의 리뷰개수가 나온다.
한 번에 호출되는 수가 20개의 기준이라 3개로 해도 20개가 나오고 33개를 하는 경우는 40개가 찍힌다.
(공식 홈페이지에는 how_many = 33개, 리뷰 수는 40개임)
review 옵션
- after : 오래된 리뷰를 필터링하는 날짜/시간
- sleep : 각 호출 사이의 휴면 시간(초)을 지정
이제 데이터를 가져왔다면, 똑같이 데이터 프레임으로 만들어보자
pd.DataFrame(tistory.reviews)
각 종류별로 어플의 리뷰를 가지고 오고 싶다면, 크롤링보다 조금 쉽게 가져올 수 있지 않을까 생각이듬
'python' 카테고리의 다른 글
[python]리스트 컴프리헨션(List Comprehension) (0) | 2023.03.08 |
---|---|
[python]스택(stack) (0) | 2023.03.07 |
[python]투포인터 (1) | 2023.01.07 |
[python]리스트(List) (3) | 2023.01.05 |
[python]문자열 포멧팅 출력 (0) | 2023.01.05 |