파이썬을 설치했다는 의미?
파이썬 번역팩을 설치했다.
= 컴퓨터가 알아들을 수 있는 언어로 번역해줘! 라는 번역팩을 설치했다~!
파이썬의 장점
javascript보다 직관적이다!
❕ 깨알 주의!
실행할 때는 반드시 오른쪽 마우스 -> run 'hello' 누르기
❕ 오류 확인 꿀팁!
① 에러의 대한 설명
② 에러가 난 부분
-> 에러에 대한 설명을 구글링! 하면 많은사람들이 이미 올려놨으니 참고하기~~
javascript에서 함수? function
python 에서 함수? def
❕ 이름(f(x))은 마음대로 정할 수 있다!
❔ 프로그램에서 함수란?
✔ 정해진 동작을 수행하는 것 (변수를 받던 안받던 수행~)
✔ if/else로 구성
✔ python에서 반복문은, 리스트 요소들을 하나씩 꺼내쓰는 형태 !
❕ python에서 반복문은 항상 list와 함께 쓰인다~!
✔ python은 방대한 라이브러리로 유명함
💡 패키지 : 모듈(일종의 기능들 묶음)을 모아놓은 단위
💡 라이브러리 : 이러한 패키지의 묶음
-> 즉! 패키지 설치 = 외부 라이브러리 설치
💡 가상환경 (virtual environment)
: 프로젝트별로 패키지들을 담을 공구함, 즉 격리된 실행환경!
💬 음...! 가상환경이라는 것이 아직은 모호하게 다가오기는 하지만 어떤느낌인지는 파악이 된다...!
크롤링?
구글이나 네이버의 검색엔진이 내 사이트를 퍼가는 행위
💡 크롤링에서 중요한 기술
✔ 요청하는 것
✔ 요청해서 가져온 html중에 내가 원하는 정보를 잘 솎아내는 것
❕ 이때!
requests 라이브러리로 요청, beautifulsoup4 라이브러리로 솎아냄
💡 beutifulsoup4에서 가져올때
✔ 태그의 속성을 가져올때 -> 태그['속성']
✔ 태그의 텍스트를 가져올때 -> 태그.text
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.nhn?sel=pnt&date=20200303',headers=headers)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')
# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')
# movies (tr들) 의 반복문을 돌리기
for movie in movies:
# movie 안에 a 가 있으면,
a_tag = movie.select_one('td.title > div > a')
if a_tag is not None:
rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
title = a_tag.text # a 태그 사이의 텍스트를 가져오기
star = movie.select_one('td.point').text # td 태그 사이의 텍스트를 가져오기
print(rank,title,star)
mongoDB : 데이터베이스 (실행되어도 눈에 보이지 않음)
Robo3T : mongoDB의 데이터를 볼 수 있도록 시각화 하는 프로그램
💡 DB의 개괄
❔ database 왜 쓰는 걸까?
✔ 데이터를 잘 가져다 쓰려고!
✔ ex) 책장을 쓰는 이유는 나중에 책을 잘 찾아오기 위해서잘 쌓아두는 것~~
💡 DB의 종류
SQL
✔ 행/열이 정해진 엑셀에 데이터를 저장하는 것과 유사
✔ 장점 : 정형화된 데이터를 뽑아가는 방식에는 최적화
✔ 단점 : 중간에 바꾸기가 불편
✔ ex) MS-SQL, My-SQL 등
NoSQL
✔ 딕셔너리 형태로 데이터를 저장 하는 DB
✔ 데이터마다 값이 다름
✔ 장점 : 데이터 변경에 유연하다.
✔ ex) MongoDB
❕ 이때!
파이썬으로 몽고디비를 조작하려면 남이 만들어놓은 pymongo라는 라이브러리를 사용
💡 insert (저장)
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
💡 find (여러개 찾기)
same_ages = list(db.users.find({},{'_id':False}))
for person in same_ages:
print(person)
#결과값
{'name': 'bobby', 'age': 21}
{'name': 'john', 'age': 27}
{'name': 'smith', 'age': 30}
{'name': 'jane', 'age': 21}
💡 find_one (특정 값만 찾기)
user = db.users.find_one({'name':'bobby'})
print(user)
💡 update_one (바꾸기)
# name이 bobby인 애를 찾아서 age를 19로 update해라!
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
💡 delete_one (지우기)
# name이 bobby인 애를 찾아서 delete해라!
db.users.delete_one({'name':'bobby'})
✔ 파이몽고 기본셋팅 불러오기
✔ doc 만들어 insert 해주기
doc = {
'rank' : rank,
'title' : title,
'star' : star
}
db.movies.insert_one(doc)
✔ find_one 연습
<매트릭스 영화 평점 가져오기>
▶️ 나의 코드
target_movie = db.movies.find_one({'title':'매트릭스'})['star']
print(target_movie)
▶️ 모범코드
target_movie = db.movies.find_one({'title':'매트릭스'})
print (target_movie['star'])
💬 나는 print 이전에 star_movie 자체에서 ['star']값을 불러냈는데, 모범답안에서는 타이틀이 매트릭스인 영화를 먼저 찾고 print에서 ['star']을 뽑아냈다. 둘의 차이에서 오는 영향은 어떤게 있을까?
✔ find 연습
<매트릭스와 평점이 같은 영화제목 가져오기>
target_movie = db.movies.find_one({'title':'매트릭스'})
target_star = target_movie['star']
movies = list(db.movies.find({'star':target_star}))
for movie in movies:
print(movie['title'])
💬 여기서 for movie in movies의 사용방법을 정확하게 이해하지 못한거 같다. 다시한번 복습이 필요할듯...!
-> list안에 dictionary가 들어있는 경우 for in 반복문 으로 출력해준다!
✔ update_one 연습
<매트릭스 영화 평점 0으로 만들기>
db.movies.update_one({'title':'매트릭스'},{'$set':{'star':0}})
💡 python 에서 공백 제거하기
.strip() : 앞뒤 공백제거
▶️ 나의 코드
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta
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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1' ,headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for music in musics:
title = music.select_one('td.info > a.title.ellipsis').text.strip()
rank = music.select_one('td.number')
name = music.select_one('td.info > a.artist.ellipsis').text
print(rank, title, name)
>결과값
<td class="number">1
<span class="rank">
<span class="rank"><span class="rank-up">1<span class="hide">상승</span></span></span>
</span>
</td> 아로하 조정석
💬 title, name까지는 깔끔하게 값만 나오도록 클렌징이 되었는데 rank값만 깔끔하게 나오지 않는 상황..... 순위값만 빼오는 과정에서 엄청나게 해멨다....😭😭
💬 해설영상을 보니 '문자열 자르기'를 이용하면 된다해서 바로 구글링! text[ : ]를 사용해서 문자열을 자를 수 있다고 한다.
<자료 출처>https://wikidocs.net/2838
▶️ 완성 코드
for music in musics:
title = music.select_one('td.info > a.title.ellipsis').text.strip()
rank = music.select_one('td.number').text[0:2].strip()
name = music.select_one('td.info > a.artist.ellipsis').text
print(rank, title, name)
> 결과값
1 아로하 조정석
2 시작 가호 (Gaho)
3 처음처럼 엠씨더맥스 (M.C the MAX)
4 이제 나만 믿어요 임영웅
5 아무노래 지코 (ZICO)
6 흔들리는 꽃들 속에서 네 샴푸향이 느껴진거야 장범준
7 뭔가 잘못됐어 권진아
8 WANNABE ITZY (있지)
9 돌덩이 하현우 (국카스텐)
10 어떻게 지내 (Prod. by VAN.C) 오반 (OVAN)
코딩을 시작하기 전 여러가지 언어들 중에 파이썬을 가장 배워보고 싶었다. 왜냐고 묻는다면 딱히 명확한 이유는 없고... 그냥 print를 써보고 싶었달까...?ㅋ🙄 이렇게 직접 파이썬을 다뤄보니 이전에 배웠던 자바스크립트와 비슷한듯 하면서 다른 부분이 헷갈리기도 하지만 확실히 재미있다!! 그 중에 크롤링하는 과정이 가장 흥미로웠다. 내가 원하는 것만 쏙쏙 빼오는 그 맛이 있다😆
아직은 서투르기도 하고 기초수준의 내용만 다루는 단계이지만 파이썬에 대해 더 공부해보고 싶은 마음이 생기는 주차였다.