SiLaure's Data
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(2) 본문
(1)에서 나온 결과를 해결해보려 했던 노력의 흔적
네이버링과 구글링을 하기 시작ㅎ
혼돈의 시작과 우주여행 출발...
import requests
import json
import bs4
page_num = 1
movie_num = 84775
url = f'http://www.cgv.co.kr/movies/detail-view/?midx={movie_num}#{page_num}'
param = "{\"TotalCount\":14509,\"List\":[{\"CommentIdx\":31525436,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"너무너무\\n재밌어요 잘봤어요\",\"UserID\":\"mth0105\",\"RegistUser\":\"민태홍\",\"NickName\":null,\"UserImage\":\"\",\"UserSmallImage\":\"\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"N\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"mt**105\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":true,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":0,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null},{\"CommentIdx\":31525434,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"예상했던 그 대로임. 해외올로케라서 현장감은 있었습니다\",\"UserID\":\"yoonjcho777\",\"RegistUser\":\"조윤주\",\"NickName\":null,\"UserImage\":\"\",\"UserSmallImage\":\"\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"Y\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"썬롸이주\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":true,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":0,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null},{\"CommentIdx\":31525433,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"옳고 그름을 떠나 아이들에게 총 쥐어주는 집단은 나쁜 넘이다.\",\"UserID\":\"kgsdragon\",\"RegistUser\":\"김강섭\",\"NickName\":null,\"UserImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2018/0118/kgsdragon_080401_M.jpg\",\"UserSmallImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2018/0118/kgsdragon_080401_M.jpg\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"Y\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"가을햇볕\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":true,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":0,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null},{\"CommentIdx\":31525431,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"남북이 화합하는 모습이 시대적인 모습과 대비되어 잘표현되어 있는\\n것같다.\",\"UserID\":\"ysgmw862367\",\"RegistUser\":\"윤석경\",\"NickName\":null,\"UserImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2018/0102/ysgmw862367_094610_M.jpg\",\"UserSmallImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2018/0102/ysgmw862367_094610_M.jpg\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"Y\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"타임리더\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":true,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":0,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null},{\"CommentIdx\":31525428,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"류승완감독 믿고보구요 배우도 믿고보니 아무생각없이봐서 올해최고의 승완감독님 다음작품도 기대합니다~\",\"UserID\":\"shboy777\",\"RegistUser\":\"shboy777\",\"NickName\":null,\"UserImage\":\"\",\"UserSmallImage\":\"\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"Y\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"sh**y777\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":false,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":1,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null},{\"CommentIdx\":31525427,\"CommentTypeCode\":524,\"Point\":0,\"CommentText\":\"볼만하고 나라를 생각하게 하고 먼가 생각하게 하는 영화\\n\",\"UserID\":\"windbell79\",\"RegistUser\":\"변수현\",\"NickName\":null,\"UserImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2017/0519/windbell79_013621_M.jpg\",\"UserSmallImage\":\"https://img.cgv.co.kr/MyCGV/Profile/2017/0519/windbell79_013621_M.jpg\",\"RegistDate\":\"2021.08.02\",\"EggPoint\":2,\"IsVIP\":\"N\",\"PollCharming\":\"N\",\"Acting\":null,\"Story\":null,\"Visual\":null,\"OST\":null,\"Effect\":null,\"MediaTypeCode\":\"411^\",\"UserIdNicName\":\"보라루핀\",\"IsMine\":false,\"IsViewer\":true,\"IsShowView\":true,\"IsNormal\":false,\"IsMobile\":true,\"MovieIdx\":84775,\"MovieTitle\":\"\",\"MovieGrade\":{\"Idx\":919,\"GradeText\":\"미정\",\"StyleClassName\":\"grade-none\"},\"PosterImage\":{\"ThumbNailImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg\",\"SmallImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg\",\"MiddleImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg\",\"LargeImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg\",\"OrgImage\":\"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg\"},\"IsMyGOOD\":false,\"GOODCNT\":0,\"IsMySPOILER\":false,\"SPOILERCNT\":0,\"IsMyREPORT\":false,\"REPORTCNT\":0,\"withviewcnt\":0,\"withviewer\":\"\",\"Genre_SMS1\":null,\"EmotionYN\":null,\"Emotion1\":null,\"Emotion1Text\":null,\"Emotion2\":null,\"Emotion2Text\":null,\"Emotion3\":null,\"Emotion3Text\":null,\"Emotion4\":null,\"Emotion4Text\":null,\"Emotion5\":null,\"Emotion5Text\":null}]}"
# param_list = param.split(',')
# print(param_list)
type(param_list[0])
len(param_list)
331
- str을 ','로 구분하여 자르면 list가 된다.
list를 dict로 변환하기¶
1. dict comprehension을 이용한 방법¶
- dict comprehension을 이용하여 list를 dict로 변환할 수 있습니다.
- list는 다음과 같이 key와 value가 순차적으로 정렬되어있습니다. 이 리스트를 comprehension을 이용하여 dict를 만듭니다.
list = ['a', 1, 'b', 2, 'c', 3]
dict = {list[i]: list[i + 1] for i in range(0, len(list), 2)}
print(list) print(dict)
Output: ['a', 1, 'b', 2, 'c', 3] {'a': 1, 'b': 2, 'c': 3}
- 다음과 같이 index를 key로, list의 아이템을 value인 dict를 만들 수도 있습니다.
list = ['a', 'b', 'c']
dict = {(i + 1): list[i] for i in range(0, len(list))}
print(list) print(dict)
Output: ['a', 'b', 'c'] {1: 'a', 2: 'b', 3: 'c'}
2. zip을 이용한 방법¶
list_str = ['a', 'b', 'c'] list_int = [1, 2, 3] dict = dict(zip(list_str, list_int))
print(dict)
Output: {'a': 1, 'b': 2, 'c': 3}
[list를 dict로 변환하기]
파이썬 Python - 딕셔너리 Dictionary 안의 리스트 List 에서 특정 키 Key 값만 가져오기
파이썬으로 개발을 하다보면 JSON형태로 데이터를 받아올 때가 많다.
특히 API 요청 이후 딕셔너리 dictionary 로 값들이 반환되는 경우가 있는데, 굉장히 복잡한 형태를 띄는 경우가 많다.
예를 들자면 아래와 같은 딕셔너리 dictionary 들이 반환된다.
alist = {'키1':['값1', '값2'], '키2':['값3', '값4'], '키3':['값5', '값6']}
딕셔너리 dictionary 안에 키 key 값들이 3개 들어있고, 각각 키 key 에 대응하는 값 value들이 2개씩 존재한다.
이때 값 value들은 리스트 list의 형태를 띄고 있다.
위와 같은 상황에서 나는 '키1'의 '값1'만을 가져와서 출력하고 싶을 때가 있다.
먼저 alist가 어떤 키 key 들을 가지고 있는지 출력해보자.
어떤 키들이 있는지 출력되었다.
alist 안에는 '키1' '키2' '키3' 라는 키 key 들이 들어있음을 알 수 있다.
그럼 이 상황에서 '키1'의 첫번째 값인 '값1'을 출력해보자.
처음에 나는 당연히 '키1'에서 첫번째 값이니까 뒤에 [0]을 붙이면 될 줄 알았다.
아래처럼 말이다.
에러..
이는 dict_keys라는 데이터가 리스트가 아니기때문에 에러가 나는 것이다.
리스트로 한번 변환해준 뒤에 출력하면 정상적으로 출력되는것을 볼 수 있다.
alist.keys()를 리스트형으로 바꿔주자
파이썬에서는 기본적으로 딕셔너리 dictionary 형태의 자료는 키 key 값을 알아야 값 value 을 구할 수 있도록 되어있다.
하지만 만약 내가 제공받은 딕셔너리 dictionary 에서 어떤 키 key 가 들어가 있는지를 모르겠고,
첫번째 키 key 에 들어있는 리스트 중에서 첫번째 값 value 이 필요하다 라는 사실만 안다고 가정했을 때,
위와 같이 코드를 짜면 바로 구할 수 있다.
dict = {param_list[i] : param_list[i+1] for i in range(0, len(param_list)-1)}
data1 = list(dict.keys())
data2 = list(dict.values())
data1['CommentText']
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-77-9f01cb120c4b> in <module>
2 data1 = list(dict.keys())
3 data2 = list(dict.values())
----> 4 data1['CommentText']
TypeError: list indices must be integers or slices, not str
data2
['"List":[{"CommentIdx":31525436',
'"CommentTypeCode":524',
'"Point":0',
'"CommentText":"볼만하고 나라를 생각하게 하고 먼가 생각하게 하는 영화\\n"',
'"UserID":"mth0105"',
'"RegistUser":"민태홍"',
'"NickName":null',
'"UserImage":"https://img.cgv.co.kr/MyCGV/Profile/2017/0519/windbell79_013621_M.jpg"',
'"UserSmallImage":""',
'"RegistDate":"2021.08.02"',
'"EggPoint":2',
'"IsVIP":"N"',
'"PollCharming":"N"',
'"Acting":null',
'"Story":null',
'"Visual":null',
'"OST":null',
'"Effect":null',
'"MediaTypeCode":"411^"',
'"UserIdNicName":"보라루핀"',
'"IsMine":false',
'"IsViewer":true',
'"IsShowView":true',
'"IsNormal":false',
'"IsMobile":true',
'"MovieIdx":84775',
'"MovieTitle":""',
'"MovieGrade":{"Idx":919',
'"GradeText":"미정"',
'"StyleClassName":"grade-none"}',
'"PosterImage":{"ThumbNailImage":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_73.jpg"',
'"SmallImage":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_126.jpg"',
'"MiddleImage":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_185.jpg"',
'"LargeImage":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_320.jpg"',
'"OrgImage":"https://img.cgv.co.kr/Movie/Thumbnail/Poster/000084/84775/84775_1000.jpg"}',
'"IsMyGOOD":false',
'"GOODCNT":0',
'"IsMySPOILER":false',
'"SPOILERCNT":0',
'"IsMyREPORT":false',
'"REPORTCNT":0',
'"withviewcnt":0',
'"withviewer":""',
'"Genre_SMS1":null',
'"EmotionYN":null',
'"Emotion1":null',
'"Emotion1Text":null',
'"Emotion2":null',
'"Emotion2Text":null',
'"Emotion3":null',
'"Emotion3Text":null',
'"Emotion4":null',
'"Emotion4Text":null',
'"Emotion5":null',
'"Emotion5Text":null}]}',
'{"CommentIdx":31525427',
'"CommentTypeCode":524',
'"UserID":"yoonjcho777"',
'"RegistUser":"조윤주"',
'"NickName":null',
'"PollCharming":"N"',
'"IsMine":false',
'"CommentTypeCode":524',
'"UserID":"kgsdragon"',
'"RegistUser":"김강섭"',
'"NickName":null',
'"UserSmallImage":"https://img.cgv.co.kr/MyCGV/Profile/2018/0118/kgsdragon_080401_M.jpg"',
'"RegistDate":"2021.08.02"',
'"IsMine":false',
'"CommentTypeCode":524',
'"UserID":"ysgmw862367"',
'"RegistUser":"윤석경"',
'"NickName":null',
'"UserSmallImage":"https://img.cgv.co.kr/MyCGV/Profile/2018/0102/ysgmw862367_094610_M.jpg"',
'"RegistDate":"2021.08.02"',
'"IsMine":false',
'"CommentTypeCode":524',
'"UserID":"shboy777"',
'"RegistUser":"shboy777"',
'"NickName":null',
'"IsMine":false',
'"MovieIdx":84775',
'"IsMySPOILER":false',
'"CommentTypeCode":524',
'"UserID":"windbell79"',
'"RegistUser":"변수현"',
'"NickName":null',
'"UserSmallImage":"https://img.cgv.co.kr/MyCGV/Profile/2017/0519/windbell79_013621_M.jpg"',
'"RegistDate":"2021.08.02"',
'"IsMine":false']
'Records of > Projects' 카테고리의 다른 글
[EDA] Instacart Market Basket Analysis - 코드 필사(1) (0) | 2021.08.13 |
---|---|
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(final) (1) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(4) (0) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(3) (0) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(1) (0) | 2021.08.02 |