[WIL] 웹개발 종합반 3주차

이현동·2022년 12월 29일
0

웹개발종합

목록 보기
3/6

1. 3주차 회고

3주차에서는 파이썬의 기초 문법에 대해서 배워볼 수 있었고, 파이썬에서 패키지(=외부 라이브러리)를 사용해보았다. 이 패키지를 통해 웹스크래핑(크롤링)을 실습해 볼 수 있었다. 웹사이트의 html파일에서 내가 원하는 정보만 스크랩하여 뽑아내는 것으로 말로만 들어봤던 것을 실제로 해볼 수 있어서 신기하고, 다양하게 활용할 수 있을 것 같았다.
DB에 대해서도 배웠으며, 웹개발 종합반에서는 mongoDB를 사용하였다. mongoDB 또한 파이썬 패키지를 사용해 데이터를 조작하는 실습을 해봤는데, 위에서 배웠던 크롤링을 사용해서 DB에 저장해보았다.
직접 간단하고 쉽게 DB의 데이터를 조작해볼 수 있어 만족!

2. Python

1) python

대학교 교양수업으로 잠깐 들었던 파이썬이라 문법이 잘 기억이 나지 않았지만, 직관적인 파이썬이라 금방 익숙해 질 수 있었던 것 같다.
3주차에서는 파이썬을 통해서 웹스크래핑, DB의 데이터 조작을 간단하게 해보았다.

2) 패키지

패키지란 일종의 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다. 3주차 강의에서는 외부 라이브러리를 사용하기 위해 패키지를 설치했다.

  • 가상환경(virtual environment)?
    예를들어 회사에서는 패키지 A, B, C를 사용하고 개인 프로젝트에서는 B, C, D, F를 사용하는데, 회사에서 패키지 B를 패키지 B'로 사용한다고 했을 때, 가상환경이 없다면 패키지 B를 사용하는 개인 프로젝트의 코드를 모두 변경해야하는 불편함이 생긴다.
    이를 방지해주는 것이 가상 환경으로 프로젝트마다 다른 패키지를 사용, 즉 격리된 실행 환경을 만들어둘 수 있다.

3) requests

  • requests는 파이썬으로 HTTP 통신이 필요한 프로그램을 작성할 때 가장 많이 사용되는 라이브러리
  • 특히 원격에 있는 API를 호출할 때 유용하게 사용할 수 있다
import requests # requests 라이브러리 설치 필요
r = requests.get('API url') rjson = r.json()

doc = rjson['dic'] # JSON값 doc에 저장

4) beautifulsoup4

  • HTML정보로 부터 원하는 데이터를 가져오기 쉽게, 비슷한 분류의 데이터별로 나누어주는 파이썬 라이브러리
import requests
from bs4 import BeautifulSoup

url = 'API'

# 타겟 URL을 읽어 추출하기 좋은 상태로 만듦
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(url, headers=headers)

# HTML을 bs4이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태
# 코딩을 통해 필요한 부분 출력
soup = BeautifulSoup(data.text, 'html.parser') # html.parser는 기본설치, 속도는 중간

title = soup.select_one('meta[property="og:title"]')['content']
image = soup.select_one('meta[property="og:image"]')['content']
desc = soup.select_one('meta[property="og:description"]')['content']

print(title, image, desc) 

# 0g:title, og:image, og:description 
#속성을 가진 content 값 콘솔에 출력

3. DB

  • 데이터베이스(Data Base)는 데이터를 잘 넣어두고 나중에 잘 찾기 위해서 꼭 필요하다.

1) 종류

DB에는 크게 두 종류가 있다.

  • RDBMS(SQL)

    관계형 데이터 베이스를 말하는 것이로 테이블, 행, 열의 정보를 구조화하는 방식이다.
    엑셀에 데이터를 저장하는 것과 유사하다.
    정형화 되어있는 만큼, 데이터의 일관성/분석에 용이할 수 있지만
    갑자기 중간에 열을 하나 더하는 것은 어려울 것이다.

  • No-SQL
    딕셔너리 형태로 데이터를 저장하는 DB
    데이터 하나하나마다 같은 값을 가질 필요가 없어 자유로운 형태의 데이터 적재에 유리할 수 있지만
    일관성이 부족할 수 있다.

2) mongoDB

정보를 행(row) 대신 도큐먼트(documnet)에 저장하는 방식
테이블의 변경이 발생했을 때 테이블을 추가하거나 스키마를 맞춰야하는 걱정 없이 구조화된 도큐먼트를 데이터베이스에 저장할 수 있다는 것이 매우 유연
JSON(JavaScript Object Notation)에 기반
키(key)와 키에 대한 값(value)로 이루어져 있고 중첩에 제한이 없다.

{
    _id: 33aj3l21jdlf,
    username: 'ann',
    email: 'abcd45691@abcd.com'
}
  • 사용법
from pymongo import MongoClient
import certifi # 오류가 생겨서 보안 관련 추가 설정
ca = certifi.where()
client = MongoClient('mongodb+srv://mongoDBID:<password>@cluster', tlsCAFile=ca) # tlsCAFile=ca 추가
db = client.dbname

# 저장 - 예시
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'})
  • 실습
movie = db.movies.find_one({'title': '가버나움'})

# all_movies = list(db.movies.find({}))
# for same_movie in all_movies:
#     if same_movie['star'] == movie['star']:
#         print(same_movie['title'])

star = movie['star']
# {'star': star} 별점이 같다는 조건 입력
all_movies = list(db.movies.find({'star': star}, {'id': False})) 
for m in all_movies:
    print(m['title'])

db.movies.update_one({'title':'가버나움'}, {'$set':{'star': '0'}})

데이터 베이스에 저장된 영화 중 '가버나움'과 같은 평점을 가진 영화를 찾고, 평점을 '0'으로 업데이트


참고

DaleSeo
EVEYTHING
Hoing

profile
https://hdlee.dev

0개의 댓글