개발 강의/스파르타코딩클럽 웹개발 종합반

스파르타코딩클럽 웹개발 종합반 - 3주차

Woonys 2021. 9. 18. 22:17
반응형

3주차는 파이썬을 활용한 웹 크롤링을 중점적으로 공부한다. 파이썬으로 웹에서 데이터를 끌어온 다음, mongoDB에 저장하는 과정을 공부한다.

 

3-3. 연습 겸 복습 - 나홀로 메모장에 openAPI 붙여보기

1, 2주차에 작업했던 나홀로 메모장을 다시 열어보자.

 

이것을 어떻게 바꿀 것이냐? 아래와 같은 방식으로 바꿀 것이다.

 

첫 번째로 해야 할 일은 뭘까? 

 

"이 API를 언제 호출해야 할까?" 완성된 결과물을 보면, 새로고침 했을 때 따로 뭔가 누르지 않고도 위의 사진과 글이 자동으로 나온다. 로딩이 되자마자 데이터를 불러온다! => 앞에서 숙제에서 했던 방식! <javascript 로딩 후 실행>을 가져와본다. 

 

$(document).ready(function () {
        function_name();
      });
      
function function_name() {
	function_contents
    }

$(document).ready를 이용하면 로딩이 끝나자마자 바로 해당 function을 자동으로 실행하라는 명령을 수행한다.

 

이제 아래 function_name이라 지칭한 함수를 짜면 되는데.. 코드는 어떻게 짤까? 내가 a to z 다 짜나? 노! 이전에 짰던 애들 다 가져와라! 이런 거 처음부터 짜려고 하지 말고!

 

3-4. 파이썬 시작하기

 

파이썬은 컴퓨터와 소통하기 위한 번역기!

 

파이썬 문법은 이미 잘 체득하고 있어서 여기에 따로 공부 내용은 적지 않을 예정. 꿀팁만 체크!

 

* 꿀팁: 에러 뜰 때 => 마지막 줄만 봐라!

 

3-8. 웹스크래핑(크롤링) 기초

 

requests, bs4 라이브러리 설치

 

*크롤링이 가능한 이유는? 웹페이지를 열 때 => 열고 나서부터는 인터넷과 관계없음. 서버를 통해 웹페이지를 여는 정보를 받아왔고 그걸 웹브라우저로 시각화한 것임. 이미 정보를 받아왔으니 이걸 솎아내는 게 크롤링!

 

크롤링할 때 중요한 2가지

1) 요청하는 것!:코드 단에서 브라우저를 켜지 않고 요청하는 것 => requests를 이용!

2) 요청해서 가져온 html 코드 중에 내가 원하는 정보를 잘 솎아내는 것! => bs4를 이용!

 

네이버 영화 웹페이지를 켠 다음 우클릭해서 검사 탭을 눌러보면? 수많은 html 코드의 향연..여기서 내가 원하는 정보만 골라내야 해!

 

결론: requests로 요청하고 bs4로 솎아낸다!

 

 

네이버 영화 페이지 정보를 긁어오는 기본 코드를 보자.

 

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

print(soup)

data = ~~에서 requests.get 요청을 할 때 headers=headers? => 기본적인 요청을 막아둔 사이트가 많아서 브라우저에서 엔터 친 것처럼 해주려고!

 

밑에서 그린 북에 대한 태그를 가져오고 싶다? 우클릭 -> 검사 탭으로 가서 copy - copy selector를 클릭!

아래와 같이 soup.select_one('')에서 '' 사이에 복사한 selector 경로를 넣는다.

 

from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')

print(title)

>> <a href="/movie/bi/mi/basic.naver?code=171539" title="그린 북">그린 북</a>

이렇게 해당 태그가 출력되는 것을 볼 수 있다.

 

이 때, 해당 태그에서 태그 안의 텍스트만 꺼내오고 싶다? => title.text 입력!

태그 속성(attribute)를 가져오고 싶으면? ex) href에 해당하는 값을 가져오려면 title['href'] => title['태그 내 해당 속성 이름']

 

3-10 DB설치 확인

 

3-1에서 설치했던 mongoDB와 Robo 3T를 실행해본다.

 

*둘의 차이는?

mongoDB: 데이터베이스! 저장소 개념. 근데 얘는 우리 눈에 보이지 않음..

Robo3T: mongoDB 데이터를 눈으로 확인할 수 있게 시각화해주는 프로그램!

 

3-11 DB개괄

 

database는 왜 쓸까? 1) data를 저장하기 위해 2) data를 가져다 쓰기 위해 => 답은 2번! 잘 정리하는 이유는 나중에 잘 찾기 위해서임!

 

database 프로그램을 만드는 회사들이 자랑하는 것들: 우리는 이렇게 쌓아서 잘 찾을 수 있어!

 

database 종류: 1) SQL 2) NoSQL (No는 아니다의 No가 아니라 Not only를 뜻함!)

 

 

SQL:

- 엑셀에 가까움. 미리 카드를 만들어 둔 다음 그 카드 양식을 채워넣는! 카드 내용을 공란으로 두고.

- 행/열을 미리 정해놔야 함. ex) 회원 만 명이 있는데 => 새로운 데이터 - 집주소를 추가로 받겠다? 하면 그 만명에 대한 새로운 열(집주소)를 생성해야. => 중간에 바꾸기 불편함. 하지만 이미 만들어진 데이터를 추출하기에는 좋음. 이미 잘 정렬되어 있으니!

 

NoSQL:

- 딕셔너리 형태! 어떤 애는 딕셔너리 안에 값이 있기도 하고 없기도 하고

- 데이터 하나하나마다 같은 소집합(sql로 치면 같은 열)에 있을 이유가 없음. 자유롭게 데이터를 적재할 수 있음! 바뀔 일이 많은 데이터 양식의 경우 이걸 쓰는 게 좋다!(특히 초기 스타트업)

 

 

3-12 pymongo로 DB 조작하기

 

pymongo: 파이썬으로 mongoDB 조작하는 라이브러리!

 

pymongo에서는 네 가지만 기억하자

 

1) insert: 데이터 추가

2) find: 데이터 찾기 (조회)

3) update: 데이터 수정

4) delete: 데이터 삭제

 

*CRUD(create/read/update/delete)와 동일한 양식!

from pymongo import MongoClient
client = MongoClient('localhost', 27017) # 내 컴에서 돌아가고 있는 몽고디비에 접속할 거야
db = client.dbsparta # dbsparta라는 이름으로 db에 접속할 거야


#insert 시작

doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

 

*콜렉션: mongoDB가 NoSQL이라 암만 자유롭게 db를 쌓을 수 있더라도, 이왕이면 같은 애들은 잘 정렬하는 게 좋지 => 비슷한 애들끼리 묶자!

 

그래서 db에서 users라는 콜렉션 안에다가 doc 데이터를 저장한다! users라는 콜렉션은 이름을 보아 유저 관련 데이터를 모아둔 콜렉션이라고 생각하면 되겠지. *양식에 토 달지 말자! 왜 (doc) 이렇게 써야 하나요? 라고 묻지 말 것. 일단 치고 본다.

반응형