3주차에서는 파이썬의 기초 문법에 대해서 배워볼 수 있었고, 파이썬에서 패키지(=외부 라이브러리)를 사용해보았다. 이 패키지를 통해 웹스크래핑(크롤링)을 실습해 볼 수 있었다. 웹사이트의 html파일에서 내가 원하는 정보만 스크랩하여 뽑아내는 것으로 말로만 들어봤던 것을 실제로 해볼 수 있어서 신기하고, 다양하게 활용할 수 있을 것 같았다.
DB에 대해서도 배웠으며, 웹개발 종합반에서는 mongoDB를 사용하였다. mongoDB 또한 파이썬 패키지를 사용해 데이터를 조작하는 실습을 해봤는데, 위에서 배웠던 크롤링을 사용해서 DB에 저장해보았다.
직접 간단하고 쉽게 DB의 데이터를 조작해볼 수 있어 만족!
대학교 교양수업으로 잠깐 들었던 파이썬이라 문법이 잘 기억이 나지 않았지만, 직관적인 파이썬이라 금방 익숙해 질 수 있었던 것 같다.
3주차에서는 파이썬을 통해서 웹스크래핑, DB의 데이터 조작을 간단하게 해보았다.
패키지란 일종의 모듈(일종의 기능들 묶음)을 모아 놓은 단위이다. 3주차 강의에서는 외부 라이브러리를 사용하기 위해 패키지를 설치했다.
import requests # requests 라이브러리 설치 필요
r = requests.get('API url') rjson = r.json()
doc = rjson['dic'] # JSON값 doc에 저장
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 값 콘솔에 출력
DB에는 크게 두 종류가 있다.
RDBMS(SQL)
관계형 데이터 베이스를 말하는 것이로 테이블, 행, 열의 정보를 구조화하는 방식이다.
엑셀에 데이터를 저장하는 것과 유사하다.
정형화 되어있는 만큼, 데이터의 일관성/분석에 용이할 수 있지만
갑자기 중간에 열을 하나 더하는 것은 어려울 것이다.
No-SQL
딕셔너리 형태로 데이터를 저장하는 DB
데이터 하나하나마다 같은 값을 가질 필요가 없어 자유로운 형태의 데이터 적재에 유리할 수 있지만
일관성이 부족할 수 있다.
정보를 행(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'으로 업데이트