본문 바로가기
내마음대로만들어보자/크롤링

Selenium / BeautifulSoup- 구글무비 (무한스크롤, 특정값 가져오기)

by 소농민! 2021. 6. 9.
728x90

from selenium import webdriver

broswer = webdriver.Chrome("./chromedriver 2")
broswer.maximize_window()

# 페이지 이동
url = "https://play.google.com/store/movies/top"
broswer.get(url)

# 지정한 위치로 스크롤 내리기
# 해상도의 높이인 900으로 스크롤 내리기
# broswer.execute_script("window.scrollTo(0, 900)")

# 해상도의 높이인 1900으로 스크롤 내리기
# broswer.execute_script("window.scrollTo(0, 1900)")

# 화면 가장 아래로 스크롤 내리기
# broswer.execute_script("window.scrollTo(0, document.body.scrollHeight)")

import time

interval = 2 # 2초에 한번씩 스크롤 내림

# 현재 문서 높이를 가져와서 저장
prev_height = broswer.execute_script("return document.body.scrollHeight")

# 반복 수행
while True:
# 스크롤 가장 아래로 내림
broswer.execute_script("window.scrollTo(0, document.body.scrollHeight)")

# 페이지 로딩 대기
time.sleep(interval)

# 현재 문서 높이를 가져와서 저장
curr_height = broswer.execute_script("return document.body.scrollHeight")
if curr_height == prev_height:
break

prev_height = curr_height

print("스크롤 완")

import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(broswer.page_source, "lxml")

# movies = soup.find_all("div", attrs={"class": ["ImZGtf mpg5gc", "Vpfmgd"]}) 리스트형태로 감싸게되면은 클래스명이 첫번째, 두번째인거 둘다 가져오게된다.
movies = soup.find_all("div", attrs={"class": "Vpfmgd"})
print(len(movies))

for movie in movies:
title = movie.find("div", attrs={"class": "WsMG1c nnK0zc"}).get_text()

#할인 전 가격
original_price = movie.find("span", attrs={"class": "SUZt4c djCuy"})
if original_price:
original_price = original_price.get_text()
else:
# print(title, "<할인되지 않는 영화 제외>")
continue

#할인 된 가격
price = movie.find("span", attrs={"class": "VfPpfd ZdBevf i5DZme"}).get_text()

#링크
link = movie.find("a", attrs={"class": "JC71ub"})["href"]
#올바른 링크 정보 생성을 위해 : https://play.google.com + link

print(f"제목 : {title}")
print(f"할인 전 금액 : {original_price}")
print(f"할인 후 금액 : {price}")
print("링크 : ", "https://play.google.com" + link)
print("_" * 100)

broswer.quit()