컴퓨터가 파이썬을 알아들을 수 있도록 번역 패키지를 설치하는 것
파이썬 문법 → 2진법 (전기 신호)
a = 2
b = 3
print(a+b)
5
a = '대한'
b = '민국'
print(a+b)
대한민국
a = ['사과', '배', '감']
print(a[0])
a = {'name':'영수', 'age':24}
print(a['name'])
영수
def sum(a, b, c):
return a+b+c # 함수의 결과 값을 반환한다.
result = sum(1, 2, 3) # 6
print(result)
6
age = 25
if age > 20:
print('성인입니다')
else
print('청소년입니다')
ages = [5, 10, 13, 23, 25, 9]
for a in ages:
print(a)
5
10
13
23
25
9
ages = [5, 10, 13, 23, 25, 9]
for age in ages:
if age > 20:
print('성인입니다')
else
print('청소년입니다')
VS Code > 확장 프로그램 > python 설치
VS Code > 터미널 > 새 터미널 > 설정 > 기본 프로필 선택 > Git Bash > 터미널 휴지통 > 새 터미널
가상 환경: 라이브러리를 담아두는 폴더
개인과 회사 프로젝트별로 라이브러리를 담아두는 폴더가 따로 있으면 관리가 편하다
물론 폴더가 중복되긴 하지만 이렇게 관리하면 업그레이드나 다운그레이드하기 편한다.
라이브러리를 venv 폴더에다가 깔아서 해당 라이브러리를 venv에서 가져온다.
※ VS Code를 실행시킬 때 venv가 활성화된 상태인지 확인해야 한다.
$ python -m venv venv
pip(python install package) 사용
가상환경이 활성화된 상태에서 외부 라이브러리를 설치한다.
pip install requset
request 라이브러리는 fetch의 역할과 똑같다
라이브러리를 사용하기 위해선 패키치 설치 과정이 필요하다
설치가 끝났다면 request 라이브러리를 사용해보자
request라고 하는 라이브러리를 만든 사람의 document를 가보면 어떻게 써야 하는지 알려준다.
구글에 request python docs (영어 버전) https://requests.readthedocs.io/en/latest/ 또는 request python 사용법 (한글 버전)이라고 쳐서 필요한 자료를 얻는다
import requests # requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
for a in rows:
gu_name = a['MSRSTE_NM']
gu_mise = a['IDEX_MVL']
print(gu_name, gu_mise)
크롤링이란 웹에 접속해서 데이터를 솎아내어 가지고 오는 것이다.
그럴려면 라이브러리가 2개 필요함
request 웹에 접속, bs4(BeautifulSoup) 데이터를 솎아냄
pip install 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.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
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)
soup = BeautifulSoup(data.text, 'html.parser')
# 전체 html 가져오는 것을 확인할 수 있다.
print(soup)
a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')
# 지정된 html 부분만 가져오는 것을 확인할 수 있다. (솎아냄)
print(a)
# 속성 값 가져오기(bs4 - 꺽새)
print(a['href'])
#old_content > table > tbody > tr:nth-child(2)
#old_content > table > tbody > tr:nth-child(3)
trs = soup.select('#old_content > table > tbody > tr') # tr 공통 -> tr들이 리스트로 쌓인다.
for tr in trs:
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
a = tr.select_one('td.title > div > a') # 영화 제목
print(a)
# 구분선이 None으로 표시됨을 방지
if a is not None:
print(a.text)
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)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr') # 영화 리스트 공통 부분
for tr in trs:
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
a = tr.select_one('td.title > div > a') # 영화 제목
# 구분선 None 제거
if a is not None:
title = a.text # 영화 제목
# print(title)
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
rank = tr.select_one('td:nth-child(1) > img')['alt'] # 랭킹 이미지[순위]
# print(rank)
#old_content > table > tbody > tr:nth-child(2) > td.point
star = tr.select_one('td.point').text # 영화 평점
# print(star)
print(rank, title, star)
파워포인트, 엑셀, 워드와 같이 데이터를 쌓고 가져올 수 있게 하는 프로그램이다.
내 컴퓨터에 데이터베이스를 설치할 수 있다
요새는 클라우드 환경(인터넷 상의 컴퓨터)에서 운영되고 있는 데이터베이스를 빌려와서 사용한다
그래서 최신 클라우드 서비스인 MongoDB Atlas를 사용해서 클라우드 데이터베이스를 만들어 볼 것이다.
SQL
엑셀처럼 데이터를 넣을 수 있는 칸이 존재한다
비즈니스가 잘 안 바뀌는 곳에서 사용한다
No SQL(Not Only SQL: SQL 뿐만 아니다)
정형화된 틀이 존재하지 않고 데이터를 내 마음대로 저장할 수 있다
비즈니스 유연성을 크게 담보한다
파이썬(내 컴퓨터)과 mongoDB(클라우드)를 연결
내 컴퓨터에서 데이터를 mongoDB에 쏴주고 가지고 온다 (내 컴퓨터에서 mongoDB를 조작)
mongoDB를 조작하려면 두 개의 라이브러리가 필요
pip install dnspython
pip install pymongo
from pymongo import MongoClient
client = MongoClient('여기에 mongoDB URL 입력')
db = client.dbsparta
deployment > database > connect > connect your application > driver: python > version: 3.6 or later
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:<password>@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta
# insert 한 개 입력
doc = {'name':'영수','age':24} # 몽고DB는 딕셔너리를 넣어주면 된다
doc = {'name':'철수','age':20}
doc = {'name':'영희','age':30}
db.users.insert_one(doc) # 'users' 라는 명칭의 collection이다.
# select 전체 조회 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({}, {'_id': False})) # {} 조건 없음, {'_id': False} '_id' 값 제거
for i in all_users:
print(i)
# select 한 개 조회 ( _id 값은 제외하고 출력)
user = db.users.find_one({}, {'_id': False})
user = db.users.find_one({'name':'철수'})
print(user)
# update 한 개 갱신
db.users.update_one({'name':'영수'},{'$set':{'age':19}}) # name이 영수인 것을 찾아서 age을 19로 바꿔라
# delete 한 개 삭제
db.users.delete_one({'name':'영수'})
# mongoDB 연결
from pymongo import MongoClient
client = MongoClient('mongodb+srv://sparta:test@cluster0.mmgalfj.mongodb.net/?retryWrites=true&w=majority') # 라이브러리 부르기
db = client.dbsparta
# 웹 크롤링에 필요한 라이브러리
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)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr') # 영화 리스트 공통 부분
for tr in trs:
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
a = tr.select_one('td.title > div > a') # 영화 제목
# 구분선 None 제거
if a is not None:
title = a.text # 영화 제목
# print(title)
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
rank = tr.select_one('td:nth-child(1) > img')['alt'] # 랭킹 이미지[순위]
# print(rank)
#old_content > table > tbody > tr:nth-child(2) > td.point
star = tr.select_one('td.point').text # 영화 평점
# print(star)
# print(rank, title, star)
doc = {'title':title, 'rank':rank, 'star':star}
db.movies.insert_one(doc)