스파르타 웹 수업 3주차 기록이다.
3주차에는 파이썬의 문법과 간단한 사용법을 배웠다.
파이썬을 이용해서 MongoDB라는 데이터베이스에 데이터를 올리고 지우고 업데이트하는 방법과
파이썬을 이용해 선택한 웹주소의 정보들을 긁어오는 웹 스크래핑을 간단하게 배워보았다.
일단 시작하기전에 준비물이 있다.
먼저 파이썬을 설치하자
그뒤 vsCode를 실행하고 새파일 -> 파일명.py로 파일을 만들어주자 .py는 파이썬 파일을 의미한다.
파이썬 기초문법
-(변수, 기본 연산)
a = 3 # 3을 a에 넣는다
b = a # a를 b에 넣는다
a = a + 1 # a+1을 다시 a에 넣는다
num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다
# 변수의 이름은 마음대로 지을 수 있음!
# 하지만 변수 이름은 이름만 봐도 어떤걸 저장해둔 변수인지 알아볼 수 있게 짓는게 좋다.
-함수
def hey():
print("헤이")
#파이썬에서 함수 생성시, 들여쓰기는 중요해요!
#: 뒷줄부터 들여쓴것들은 함수 내부라고 생각함
hey() #헤이
def sum(a,b,c):
return a+b+c
result = sum(1,2,3)
print(result) #6
다른 언어와 다르게 앞서 다른걸 선언하지 않고 변수 이름만 입력해도 변수가 선언 되는게 확실히 편했던 것같다.
함수 또한 def를 사용해서 특이하다고 생각했고 :를 사용하기 때문에 줄을 맞추는데 더 신경쓰게 되었다.
반복문과 조건문
조건문
age = 25
if age > 20:
print("성인입니다")
else:
print("청소년입니다")
조건문은 앞서 배웠던것과 크게 다르지 않았다.
:를 이용해 들여쓰기를 하는정도...??
반복문
fruits = ['사과','배','감','귤']
for fruit in fruits:
print(fruit)
# 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.
반복문은 모양이 조금 달랐는데
for 변수이름 in 리스트(배열)이름:
으로 사용하였다 리스트 크기만큼 돌고 변수에 차례대로 리스트에 들어있는걸 넣어준다.
다음은 python패키지를 이용하기 위해 가상환경을 만들어 주는 작업이다.
가상환경은 패키지 설치 환경에서 프로젝트들을 분리해서 컨트롤 하기 위해서 이용한다.
먼저 작업할 폴더를 만들고 vsCode에서 폴더를 열어 들어가준다.
ctrl + `(백틱) 버튼을 이용해 터미널을 열어보자 맥은 영어상태로만 가능하니 안 열린다면 한영확인을 하자.
터미널이 열렸으면 만든 폴더가 마지막경로인지 확인하고 맥 기준으로
python3 -m venv venv를 입력 그럼 만든 폴더 안에 venv폴더가 생성된다.
이제 가상환경을 만들었으니 활성화를 시켜줘야하는데 맥은
source venv/bin/activate를 입력해준다.
터미널 앞에 (venv)라고 뜬다면 성공이다.
다음은 외부 라이브러리를 이용하기위해 파이썬 패키지를 설치해줘야한다.
새로운 패키지의 라이브러리를 설치할때 pip를 사용한다.
※requests라이브러리 설치
pip install requests
위 코드를 터미널에 입력하면 requests라이브러리가 설치된다.
※리퀘스트 문법의 기본 틀(가져다가 쓰자)
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
print(rjson)
-웹 크롤링
다음은 beautiful soup라는 라이브러리를 이용해 html을 검색하기 좋은 상태로 만들어 원하는 부분만 긁어와보자.
먼저 라이브러리를 설치한다
venv가 활성화 되어있는지 확인하고 설치!
※beautiful soup설치
pip install bs4
※beautiful soup의 기본 틀(가져다가 쓰자)
import requests
from bs4 import BeautifulSoup
# 타겟 URL을 읽어서 HTML를 받아오고,
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('가져올 웹 주소',headers=headers)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')
#############################
# (입맛에 맞게 코딩)
#############################
import requests
from bs4 import BeautifulSoup
# URL을 읽어서 HTML를 받아오고,
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을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')
# select를 이용해서, tr들을 불러오기
a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')
trs = soup.select('#old_content > table > tbody > tr')
# movies (tr들) 의 반복문을 돌리기
for tr in trs:
# movie 안에 a 가 있으면,
a = tr.select_one('td.title > div > a')
if a is not None:
# a의 text를 찍어본다.
print (a.text)
선택자를 가져오고 싶을 땐
웹상에서 우클릭 -> 검사 -> 원하는 html코드에 우클릭 -> copy -> copy selector를 이용해 선택자를 가져온다.
태그 안의 텍스트를 찍고 싶을 땐 → 태그.text
태그 안의 속성을 찍고 싶을 땐 → 태그['속성']
-DB
우리가 데이터베이스를 쓰는 이유가 뭘까?
데이터를 잘 정리해두고 편하게 필요한걸 잘 찾기 위해서다.
DB에는 두가지종류가 있는데 SQL과 NoSQL이다
SQL은 셀로 나누어져있어 엑셀을 생각하면 편하고
NoSQL은 Not Only SQL의 약자로 SQL만이 아니다 와 같다.
일단 MongoDB를 이용하기 위해 Atlas사이트에 가입을 했다.
하지만 코드로 MongoDB와 연결을 하기 위해서는 pymongo라는 라이브러리가 필요하다 위에서 한 설치법과 같이 venv가 활성화 되어있는지 확인하고 설치해주자.
※pymongo 설치
pip install pymongo dnspython
※mongoDB기본 틀
from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta
URL입력칸엔 내 mongoDB의 connect를 누르고 파이썬과 버전을 선택한 뒤 아래 주소를 복사해주면 된다.
만약 나는 이런 에러가 나왔었다.
pymongo.errors.ServerSelectionTimeoutError: ~ [SSL: CERTIFICATE_VERIFY_FAILED]~
다음과 같은 에러를 만나면 아래와 같이 기본 틀이 되는 코드를 바꿔주어야한다.
certifi를 먼저 가상환경에 설치해준다.
from pymongo import MongoClient
import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.내주소.mongodb.net/내DB명?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta
doc = {
'name':'bob',
'age':27
}
db.users.insert_one(doc)
pymongo에서 DB조작하기
데이터넣기
# 'users'라는 collection에 {'name':'bobby','age':21}를 넣습니다.
db.users.insert_one({'name':'영희','age':30})
db.users.insert_one({'name':'철수','age':20})
db.users.insert_one({'name':'john','age':30})
모든데이터 뽑아오기
# 모든 데이터 뽑아보기
all_users = list(db.users.find({},{'_id':False}))
print(all_users[0]) # 0번째 결과값을 보기
print(all_users[0]['name']) # 0번째 결과값의 'name'을 보기
for a in all_users: # 반복문을 돌며 모든 결과값을 보기
print(a)
특정한 결과값만 찾아서 뽑아오기
user = db.users.find_one({})
print(user)
수정하기
# 오타가 많으니 이 줄을 복사해서 씁시다!
db.users.update_one({'name':'영수'},{'$set':{'age':19}})
user = db.users.find_one({'name':'영수'})
print(user)
삭제하기
db.users.delete_one({'name':'영수'})
user = db.users.find_one({'name':'영수'})
print(user)