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

Selenium / BeautifulSoup- 만개의레시피 (무한스크롤, 특정값 가져오기)

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

from selenium import webdriver

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

# 페이지 이동
url = "https://m.post.naver.com/my.nhn?memberNo=11566067"
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초에 한번씩 스크롤 내림

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

# 반복 수행
while True:
# 현재 문서 높이를 가져와서 저장
prev_height = broswer.execute_script("return document.body.scrollHeight")

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

broswer.find_element_by_class_name("ico_arrow").click()

broswer.execute_script("window.scrollTo(0, document.body.scrollHeight)")

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

curr_height = prev_height

print("스크롤 완료")

import requests
from bs4 import BeautifulSoup

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

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

for food in foods:
title = food.find("strong", attrs={"class": "tit_feed ell"}).get_text()
desc = food.find("p", attrs={"class": "text_feed ell"}).get_text()
img = food.find("img", attrs={"alt": "본문 사진"})["src"]
link = food.find("a", attrs={"class": "link_end"})["href"]

print(f"제목 : {title}")
print(f"설명 : {desc}")
print(f"이미지 : {img}")
print("링크 : ", "https://m.post.naver.com/" + link)
print("_" * 100)

broswer.quit()