콘솔워크

[나도코딩 웹스크래핑] Chrome headless 최종소스 본문

프로그래밍/python

[나도코딩 웹스크래핑] Chrome headless 최종소스

콘솔워크 2021. 1. 17. 22:53
반응형

나도코딩에서 동적인 동작을 통해서 구글에서 webscraping이 가능하다.

스크롤을 내리면서 전체 할인된 영화정보를 가져오고, 이것을 크롬을 열지 않고도 웹스크래핑이 가능하다.

 

headless 옵션을 제외하면 foreground로 동작한다.

import time
from bs4 import BeautifulSoup
from selenium import webdriver

options = webdriver.ChromeOptions()
options.headless = True
options.add_argument("window-size=1920x1080")
options.add_argument("user-agent=")

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

browser = webdriver.Chrome(options=options)
browser.maximize_window()
url = "https://play.google.com/store/movies/top"
browser.get(url)
prev_height = browser.execute_script("return document.body.scrollHeight")

# 반복 수행
while True:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight)")

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

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

    prev_height = curr_height

print("스크롤 완료")
browser.get_screenshot_as_file("scrrenshots/google_movie.png")

soup = BeautifulSoup(browser.page_source, "lxml")
movies = soup.find_all("div", attrs={"class": "Vpfmgd"})

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:
        continue
    # 할인 된 가격
    price = movie.find(
        "span", attrs={"class": "VfPpfd ZdBevf i5DZme"}).get_text()

    # 링크
    link = movie.find("a", attrs={"class": "JC71ub"})["href"]

    print(f"제목 : {title}")
    print(f"할 인전 금액 : {original_price}")
    print(f"할인 후 금액 : {price}")
    print("링크 : ", f"https://play.google.com{link}")
    print("="*120)
반응형