2022.06.06 - [Studying/Python] - [Python] 웹 크롤링 해보기( 네이버 영화리뷰 크롤링)
이번 포스트에서는 위의 이전 포스트에서 크롤링한 데이터를 구조화 해보려고 한다.
csv파일은 이전 포스트에서 만들었으므로 그 데이터를 써보겠다.
구현할 클래스는 다음과 같다.
- 생성자로 string타입의 파일 이름을 받아야 한다.
- 대괄호로 배열처럼 indexing이 가능해야 한다.
( 예를 들어 dataset[0]은 첫 번째 감상평이다. )
indexing 결과값은 (영화명, 감상평, 평점)으로 타입은 (str, str, int)이다.
- len(dataset)의 형태로 데이터셋 내의 감상평 갯수를 조회할 수 있어야 한다.
그럼 우선 구현한 코드를 보겠다.
class RawMovieReview:
def __init__(self, file_name="samples.csv"): #생성자
self._file_name = file_name
self._data = []
self._fd = open(self._file_name, 'r')
lines = csv.reader(self._fd)
next(lines) #첫줄 넘김(헤더부분)
for line in lines:
self._data.append(line)
def __getitem__(self, index): #indexing 할 수 있도록
return self._data[index]
def __len__(self): #len을 사용할 수 있도록
return len(self._data)
rv = RawMovieReview()
print(rv[5])
print(len(rv))
print("==================================")
#한줄평 10점인 리뷰 개수 영화별로 정리
my_dict = {}
for data in range(len(rv)):
if rv[data][1]=="10":
if rv[data][0] in my_dict.keys():
my_dict[rv[data][0]] +=1
else:
my_dict[rv[data][0]] = 1
print(dict(sorted(my_dict.items(), key=lambda item: item[1], reverse = True)))
여기서 이때까지 설명 안했던 것을 볼 수 있을 것이다.
바로 __getitem__ 과 __len__ 부분이다.
이 부분들은 class의 기본 메서드로 각각 indexing과 len을 담당하는 부분이다.
우리가 dataset[0] 이런식으로 호출하면 자동으로 __getitem__메서드가 호출된다.
__len__메서드도 마찬가지다.
그럼 마지막 for문 부분은 어떤 것인지 보자
my_dict = {}
for data in range(len(rv)):
if rv[data][1]=="10":
if rv[data][0] in my_dict.keys():
my_dict[rv[data][0]] +=1
else:
my_dict[rv[data][0]] = 1
print(dict(sorted(my_dict.items(), key=lambda item: item[1], reverse = True)))
마지막에 해본 것은 평점이 10점인 것의 개수를 dict형식으로 만들어 본 것이다.
현재 데이터가 [영화, 평점, 감상평] 이런식으로 되어있기에 평점을 보려면 데이터의 첫 번째 부분을 보아야 한다.
이렇게 첫 번째 if는 설명이 될 것이다.
그 다음의 if는 [0]번째 즉 영화명이 dict안에 있는지 확인하고 있으면 count를 늘리고 없으면 추가해주는 방식이다.
dict에서 기본제공되는 keys()는 dict안의 모든 키를 표시한다.
그래서 만들어 지는 것은 영화명:평점10점 개수의 dictionary type이다.
예를 들어 샘플 내에서 쥬라기 월드의 10점인 리뷰가 100개 있고, 범죄도시의 10점인 리뷰가 80개 있다면
{ '쥬라기 월드' : 100, '범죄도시' : 80}
이런 식으로 dict가 생성된다.
이렇게 데이터 구조화를 완료했다.
다음 포스트에서는 이 클래스를 상속해서 평점으로 긍부정을 정해보려고 한다.
아직 감상평으로 긍부정을 하기에는 포스팅 내용이 많이 부족해서
평점이 특정 threshold이상인 것으로 분류해보려고 한다.
'Studying > Python' 카테고리의 다른 글
[파이썬] input() vs sys.stdin.readline() (1) | 2023.06.14 |
---|---|
[Python] 네이버 영화리뷰 학습 데이터 셋 만들기 (0) | 2022.06.06 |
[Python] 웹 크롤링 해보기( 네이버 영화리뷰 크롤링) (0) | 2022.06.06 |
[Python] Closure 설명, 사용 방법 및 예제 (0) | 2022.05.31 |
[Python] 내장함수 sorted 구현 (0) | 2022.05.24 |
댓글