일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 논문리뷰
- 불확실성
- 백준
- 텍스트분석
- 알고리즘
- uncertainty
- 강화학습
- 파이썬
- AI
- 리눅스
- pytorch
- selenium
- R
- pandas
- dropout
- VAE
- 베이지안
- 코딩테스트
- DATA
- 데이터분석
- Graph
- PYTHON
- 우분투
- GNN
- YarinGal
- 크롤링
- 빅데이터
- bayesian
- 텍스트마이닝
- Crawling
- Today
- Total
끄적거림
[리뷰 크롤링] AppStore 어플 리뷰 가져오기 2 in python(feat. cURL) 본문
2020/07/29 - [Python] - [리뷰 크롤링] AppStore 어플 리뷰 가져오기 1(feat. cURL)
지난 시간엔 apptweak이라는 사이트에서 제공하는 api를 이용해 앱 리뷰 데이터를 가져오는 작업을 진행했다.
단순 api 호출 성공으로 끝냈었지만, 오늘은 좀 더 내게 맞는 데이터를 이쁘게 가져올 수 있는 작업을 진행하려한다.
시작해보자!
1. Json to DataFrame
먼저, 이전시간에 test로 뽑아놓은 데이터를 활용하여 어떤 데이터를 어떤 구조로 적재할지를 생각해보고 다시 쿼리를 날릴때(데이터 수집) 어떻게 가져올지를 생각해봐야한다.
내가 한 달 안에 사용 가능한 횟수가 정해져 있기 때문에 신중해야한다.
Reading Data
주어진 임시 데이터를 읽어볼 것이다.
rawdata를 살펴보면 json 구조이긴하나 이것이 text 데이터로 보기 힘들게 엮여져 있다.
이것을 python의 json 모듈을 사용해서 좀 더 구조화되고 가독성 좋은 포멧으로 바꾸고자 한다.
아래의 코드를 입력하면 구조화된 json 데이터를 읽어올 수 있다.
import json
with open("../data/appstore.txt", encoding="utf-8") as f:
appstore = json.load(f)
json 모듈을 import하고, open과 json.load 함수를 사용해서 파일을 읽어온다.
이때, encoding='utf-8'의 파라미터 조건을 걸어줘야 제대로된 한글을 읽어올 수 있다.
읽어오니 이런 모양새다.
그림에서 보이듯 몇 가지 구조를 가지고 있다.
이 구조들은 홈페이지에 자세히 나와있다.
그러면 이 json 구조에서 내가 원하는 자료는 어디에 어떤 항목으로 존재할까?
지이이이난 시간 PlayStore에서 리뷰를 크롤링했을 때, 내가 선택한 항목들은 다음과 같았다.
- 리뷰 텍스트 데이터
- 별점
- 리뷰 게시 날짜
- 추천 수(좋아요 수)
이번 AppStore에서도 동일한 항목을 찾을 수가 있었다.
- content.i.body
- content.i.rating
- content.i.date
- content.i.vote_sum / content.i.vote_count (요 기능이 있는지 apple 인생 8년만에 처음 알았네요... appstore에서 리뷰를 꾹 눌러야 긍정/부정을 투표할 수 있습니다.)
- content.i.title
AppStore에서는 추가적으로 정보를 얻을 수 있다. 가령, 좋아요와 싫어요라던지, 리뷰 텍스트를 한 줄로 요약한 제목이라던지 하는 것들! PlayStore보다 더 정보가 많은 것 같아 좋은 것 같지만, 사실 vote같은 경우는 사람들이 기능을 잘 몰라서 데이터가 많이 있지 않았다. 그래서 사용하느니 차라리 빼는 방법도 생각해 볼 수 있다.
일단은 이 데이터들에서 내가 원하는 데이터만 몇 개 추출해서 DataFrame으로 만들고자한다.
사실 아래 코드는 지난 play store때에도 사용했던 코드이므로 몇 설명없이 그냥 넘어가겠다.
res_dict = []
for i in range(len(appstore['content'])):
res_dict.append({
'DATE' : str(appstore['content'][i]['date']),
'STAR' : str(appstore['content'][i]['rating']),
'LIKE' : int(appstore['content'][i]['vote_sum']),
'DISLIKE' : int(appstore['content'][i]['vote_count']) - int(appstore['content'][i]['vote_sum']),
'TITLE' : str(appstore['content'][i]['title']),
'REVIEW' : str(appstore['content'][i]['body'])
})
2. Convert Data type & format
이 후 데이터 타입이라던지, 포멧 등을 변경하는 작업을 진행해준다.
# Date
res_df['DATE'] = pd.to_datetime(res_df['DATE'], format="%Y-%m-%dT%H:%M:%SZ")
# Star
res_df['STAR'] = res_df['STAR'].apply(lambda x:int(x))
바꾸었다.
3. Trouble Shooting
근데 이제 문제가 있다.
나는 라이프플러스에 대한 appStore의 사용 리뷰를 더 많이 원하는데 이 방법으로는 이상하게 더 수집이 가능하지가 않는다.
물론, filter review를 이용해서 날짜를 지정하여 이를 반복하여 API를 활용하여 추출하면 된다고 생각했는데, 이상하게 url 뒤에 쿼리부분에서 자꾸 에러가 난다...
구글링을 많이 해보았는데도 그에 대한 자료도 몇 없고 대안을 찾기도 힘들었다.
그러던 중 새로운 리뷰 데이터 접근법을 발견했다. (구세주 같은 stackoverflow!)
이 내용은 다음 포스팅에서 다룰 예정이다!
'Python > Crawling' 카테고리의 다른 글
[리뷰 크롤링] 어플 버전 history 정보 가져오기 (0) | 2020.08.04 |
---|---|
[리뷰 크롤링] AppStore 어플 리뷰 가져오기 3 in python(feat.RSS) (5) | 2020.07.31 |
[리뷰 크롤링] AppStore 어플 리뷰 가져오기 1(feat. cURL) (0) | 2020.07.29 |
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 4(feat. selenium) (3) | 2020.07.28 |
[리뷰 크롤링] PlayStore 댓글 크롤링하기 in python 3(feat. selenium) (12) | 2020.07.27 |