본문 바로가기
내마음대로만들어보자/나만의 웹 서비스 만들기

개발일지#3-나만의 웹 서비스 만들기2 오늘뭐먹지(크롤링)

by 소농민! 2021. 6. 10.
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초에 한번씩 스크롤 내림

# 현재 문서 높이를 가져와서 저장
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"]}) 리스트형태로 감싸게되면은 클래스명이 첫번째, 두번째인거 둘다 가져오게된다.
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()


우선은 한 페이지에 보여지는 정보들을 스크래핑 해오는데는 성공했다...!!!!
역시나 아직은 개발문서를 보는건 어려운일인것같다ㅠㅠㅠㅠ 이것도 자꾸보다보면은 익숙해지겠지?ㅋㅋㅋ

이제 여기코드에 내가원하는 만큼 정보를 스크래핑해오게하기위해
더보기를 클릭하고 스크롤을 내리는 반복작업을 할 수 있도록 코드를 추가할 예정이다.

다만, 걱정되는부분은 블로그에 레시피정보가 4천개 이상 되기때문에
다소 오래걸리진않을까 걱정이되어 한번 해보고 조금 과부하가 걸린다면 특정시간만큼만 스크롤 할수있도록 설정해볼 생각이다!!

우선은 스크래핑을 정상적으로 해온다면
이정보를 mongoDB에 저장하는것까지 완성해볼 생각이다!