SiLaure's Data
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(4) 본문
그래도 점점 나아지고 있으며 깨달음을 얻음
내가 알고있는 지식으로 되는 게 아니었구나!@^^
참고한 사이트 : https://velog.io/@hyungjin1124/Selenium-%ED%99%9C%EC%9A%A92흑흑CGV의 영화리뷰는 # 뒤의 숫자를 변경해도 페이지가 변경되지 않기 때문에클릭을 통해서 페이지 간의 이동이 가능하다. 따라서 Selenium을 사용하여 크롤링을 해야한다. |
In [6]:
# 필요한 Selenium 설정
import sys
sys.path.insert(0, '/Users/user/chormedriver')
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-div-shm-usage')
wd = webdriver.Chrome('chromedriver', options=chrome_options)
Message: 'chromedriver' executable needs to be in PATH 라는 메세지가 떠서 블로그 참고하여 해결함.
chromedriver를 해당 .py의 path에 같이 넣어주면 됨.
출처 : https://blog.naver.com/hjinha2/221824739971
In [61]:
import pandas as pd
import time
from selenium.common.exceptions import NoSuchElementException
# 1) 정보를 담을 list를 생성하고 page를 돌면서 정보를 추출한다.
# 2) 클릭을 통해 페이지를 이동해야 하기 때문에 페이지 bar를 추출하고 번호를 얻어서 클릭한다.
def get_movie_reviews(url, pageNum) :
wd.get(url)
move_title = wd.find_element_by_class_name('title')
strong_title = movie_title.find_element_by_tag_name('strong').text
writer_name_list = []
comment_list = []
date_list = []
for page_no in range(1, pageNum+1) :
try :
pages = wd.find_element_by_id('paging_point')
page = pages.find_element_by_link_text(str(page_no))
page.click()
time.sleep(1)
# 클릭한 페이지에서 작성자, 리뷰내용, 작성일을 클래스 명으로 추출하고 각 list에 추가
# 빈 리스트 for문 위에 만들기
# list에 넣기
writer_name_list += [writer-name.text for writer-name in wd.find_element_by_class_name('commentMore')]
comment_list += [comment.text for comment in wd.find_element_by_class_name('box-comment')]
date_list += [date.text for date in wd.find_element_by_class_name('day')]
# 페이지가 10 이상 넘어갈 경우의 예외처리
if page_no %10 == 0 :
next = pages.find_element_by_class_name('paging-side')
next.click()
time.sleep(1)
# except NoSuchElementException :
# break
movie_review_df = pd.DataFrame({'영화 제목' : strong_title,
'작성자' : writer_name_list,
'리뷰 내용' : comment_list,
'작성일' : date_list})
return movie_review_df
File "<ipython-input-61-246c7727a2f3>", line 43
movie_review_df = pd.DataFrame({'영화 제목' : strong_title,
^
IndentationError: unexpected unindent
In [60]:
movieNum = 84775
url = f'http://www.cgv.co.kr/movies/detail-view/?midx={movieNum}#1'
get_movie_reviews(url, 12)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-60-5d60be0a0855> in <module>
4 url = f'http://www.cgv.co.kr/movies/detail-view/?midx={movieNum}#1'
5
----> 6 get_movie_reviews(url, 12)
<ipython-input-39-f48a02c21c9b> in get_movie_reviews(url, pageNum)
15 wd.get(url)
16 move_title = wd.find_element_by_class_name('title')
---> 17 strong_title = movie_title.find_element_by_tag_name('strong').text
18
19 writer_name_list = []
NameError: name 'movie_title' is not defined
Whyrano…
'Records of > Projects' 카테고리의 다른 글
[EDA] Instacart Market Basket Analysis - 코드 필사(1) (0) | 2021.08.13 |
---|---|
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(final) (1) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(3) (0) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(2) (0) | 2021.08.03 |
[ToyPrj-Crawling] CGV 리뷰 크롤링 하기(1) (0) | 2021.08.02 |
Comments