본문 바로가기

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

3주차

venv 폴더 


virtual environment : 가상 환경

프로젝트별로 패키지와 라이브러리들을 관리하기 위함이다.

 

프로젝트 별로 사용하는 패키지 버전이 다를 수 있고, 무분별하게 설치 해놓으면 관리 차원에서 어려워 지는 것을 방지하기 위해 프로젝트별로 나눠서 정리를 해놓은 것으로 판단하였다.

 

requests 패키지


pycharm을 이용해 requests 패키지를 설치하였다.

requests 라이브러리는 url에서 데이터 정보를 받아 오기 위해 사용하는 패키지이다.

ajax와 동일한 역할을 한다고 보면된다.

 

기본 requests 사용법

http://spartacodingclub.shop/sparta_api/seoulair url에 들어있는 data가 json 형식이기 때문에 json() 메서드를 이용하여 데이터를 읽어 들였다.

# requests 라이브러리 설치 필요
import requests 

r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()

 

 

웹스크래핑(크롤링)을 해보자


bs4 패키지 설치

 

url에 들어있는 데이터가 json일때는 requests 패키지만 있어도 충분하였다.

하지만 일반적인 웹 페이지에서 데이터를 긁어와서 내가 원하는 정보만 찾으려면 어떻게 해야할까?

requests 패키지만으로는 한계가 있다.

 

이때 우리에게 도움을 주는 패키지가 beautifulsoup 패키지이다.

beautifulsoup은 html tag, id, class에 우리가 쉽게 접근할 수 있도록 도와주는 패키지이다.

 

headers는 User-Agent 정보를 크롬으로 지정하여 요청한다는 것을 알려주는 역할을 하는 것이다.

requests를 사용하다 보면 response 403 에러가 나는 경우가 있는데 header에 정보를 넣어주면서 이와 같은 에러를 방지할 수 있다고 한다.

 

헤더가 추가된 requests다.

url에 들어있는 정보가 json이 아니기 때문에 json() 메서드를 쓰지 않고 text를 받아오는 것으로 대체하였다.

import requests

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.naver?sel=pnt&date=20210829',headers=headers)
html = data.text

 

그러면 이 정보를 가지고 beautifulsoup 패키지를 이용하여 내가 원하는 정보를 가져와보자.

url 주소에 들어가보면 영화에 대한 정보가 들어가있다.

 

우선 영화 '밥정'과 '그린북'에 selector 정보를 들고와 보자.

밥정 우클릭 -> 코드 우클릭 -> copy -> copy selector

두 영화의 selector 정보는 아래와 같다.

 

밥정

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

그린북

#old_content > table > tbody > tr:nth-child(3) > td.title > div > a

 

두 영화의 코드가 나눠지는 부분이 tr:nth-child(n) 부분이다.

tr 태그는 table row 라는 정보를 담고 있으며, 행 마다 영화 정보가 들어있구나 라는것을 유추할 수 있다.

 

아래 코드를 이용하여 모든 영화 정보를 가지고 올 수 있다.

'tr 태그에 위치하고 있는 모든 정보를 movies라는 변수에 넣어놓겠습니다.'

movies = soup.select('#old_content > table > tbody > tr')

모든 영화 정보는 movies에 들어가있다.

이것을 for 문을 이용하여 각각의 영화 정보를 추출해보자.

 

아래와 같은 코드를 사용하기 전에, 영화 title 대한 selector 확인, star에 대한 selector 확인 , rank에 대한 selector 확인 작업이 필요하다.

확인 작업이 끝났다면 아래와 같은 코드를 이용하여 정보를 뽑아올 수 있다.

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        rank = movie.select_one('td > img')['alt']
        star = movie.select_one('td.point').text

        print(rank, title, star)

 

전체 코드는 아래와 같습니다.

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.naver?sel=pnt&date=20210829',headers=headers)
html = data.text

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

movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a = movie.select_one('td.title > div > a')
    if a is not None:
        title = a.text
        rank = movie.select_one('td > img')['alt']
        star = movie.select_one('td.point').text

        print(rank, title, star)

 

DB (data base)


데이터를 잘 찾기 위해서 데이터를 잘 저장해두는 것이 필요하다.

데이터를 빠르로 정확하게 뽑아내기 위해 잘 저장을 하는데, 저장을 하는 곳이 database인 것이다.

우리 눈에 보이지는 않지만, DB에는 index라는 순서대로 데이터들이 정렬되어 있고 db에 데이터를 저장해 놓는다면 우리는 index라는 정보를 이용하여 데이터를 쉽고 빠르게 가져올 수 있다.

 

database에는 두 종류가 있다.

형식이 정해져 있는 SQL과 형식이 정해지지 않은 NoSQL(Not only SQL)이 있다.

SQL은 형식이 정해져 있기 때문에 이상한 데이터가 들어올 확률이 적다.

하지만 확장성 부분에서는 NoSQL이 훨씬 편리하다. 

스타트업 이런 곳에서 NoSQL을 많이 사용하는 편이다.

DB는 컴퓨터가 아니라 프로그램이다. 데이터를 잘 쌓고 잘 가져오게 하기 위한 프로그램이다.

 

어떤 것인지 감을 쌓기 위해 DB를 한번 사용해보자

우리는 mongoDB Atlas를 사용해 볼 것이다.

 

우선 pymongo 패키지와 dnspython 패키지를 설치하자.

내 경우에는 mongodb 접속시 CERTIFICATE_VERIFY_FAILED]~ 와 같은 오류가 발생하여 certifi 패키지를 추가적으로 설치하고 사용하였다.

 

기본적인 사용법은 아래와 같으며

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

 

certifi를 추가하였다면 아래와 같이 사용하면 된다.

저는 db이름이 dbsparta라서 client.dbsparta로 데이터 베이스를 연결합니다.

from pymongo import MongoClient
import certifi

ca = certifi.where()

client = MongoClient('url주소', tlsCAFile=ca)
db = client.dbsparta

 

데이터 베이스에 데이터를 저장, 조회, 수정, 삭제 등을 하는 방법을 알아보자.

from pymongo import MongoClient
import certifi

ca = certifi.where()

client = MongoClient('URL', tlsCAFile=ca)
db = client.dbsparta

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

 

'강의 > 스파르타코딩클럽 웹개발종합반' 카테고리의 다른 글

5주차  (0) 2022.01.14
blueprint  (0) 2022.01.13
4주차  (0) 2022.01.13
2주차  (0) 2022.01.10
1주차  (0) 2022.01.09